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

Python Django check if an attribute exists or has been set

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

1
2
3
4
5
 user = request.user
    try:
        user.user_info.university
    except:
        print 'redirect to info page'

这很好,但我觉得例外应该是例外,而不是if语句替代。有更好的方法吗?


我想说,除了例外,处理这件事是Python式的方法。你可以这样做:

1
2
3
4
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的参考资料和问题。

Python词汇表Python中的EAFP原理是什么EAFP和真正的例外