Python Django检查属性是否存在或是否已设置

时间:2013-04-20 20:26:37

标签: python django

我有一个User对象和一个UserInfo对象,它们具有一对一的关系。我只是添加UserInfo对象,因此一些用户已经有User个对象,但没有UserInfo个对象。我想检查User对象是否有与之关联的UserInfo对象,如果没有将它们重定向到我可以获取一些信息的页面。我仍然是python的新手,并尝试做一个if request.user.user_info:,当它不存在时抛出异常,所以我最终这样做了:

 user = request.user
    try:
        user.user_info.university
    except:
        print 'redirect to info page'

工作正常,但我觉得异常应该是异常,而不是if语句替换。有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

我会说用异常处理这个是pythonic方法。你可以这样做:

try:
    # do your thing when user.user_info exists
except AttributeError: # Be explicit with catching exceptions.
    # Redirect.

有一个名为it's easier to ask for forgiveness than permission (EAFP)的编程概念,在Python中广泛使用。我们假设给定对象存在属性,键等,并且当它们不存在时捕获异常。

以下是关于EAFP的一些参考和SO问题。

Python glossary
What is the EAFP principle in Python
EAFP and what is really exceptional