Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django检查属性是否存在或已设置_Python_Django - Fatal编程技术网

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

Python Django检查属性是否存在或已设置,python,django,Python,Django,我有一个User对象和一个UserInfo对象,它们具有一对一的关系。我只是添加了UserInfo对象,因此一些用户已经拥有User对象,但没有UserInfo对象。我想检查用户对象是否有与之关联的UserInfo对象,如果没有,则将其重定向到我可以获取一些信息的页面。我还是python新手,并且尝试过执行if request.user.user\u info:,当它不存在时会抛出异常,因此我最终执行了以下操作: user = request.user try: use

我有一个
User
对象和一个
UserInfo
对象,它们具有一对一的关系。我只是添加了
UserInfo
对象,因此一些用户已经拥有
User
对象,但没有
UserInfo
对象。我想检查用户对象是否有与之关联的UserInfo对象,如果没有,则将其重定向到我可以获取一些信息的页面。我还是python新手,并且尝试过执行
if request.user.user\u info:
,当它不存在时会抛出异常,因此我最终执行了以下操作:

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

这很好,但我觉得异常应该是针对异常的,而不是针对if语句。有更好的方法吗?

我想说,处理异常是pythonic方法。您可以这样做:

try:
    # do your thing when user.user_info exists
except AttributeError: # Be explicit with catching exceptions.
    # Redirect.
有一个编程概念叫做
,请求原谅比请求权限(EAFP)
更容易,这在Python中被广泛使用。我们假设给定对象存在属性、键等,并在它们不存在时捕获异常

以下是一些关于EAFP的参考资料和问题




在用户< /代码>中尝试<代码> HasTART(用户,UsSeriFipe)和 UsSeriFipe。另一个要考虑的事情是,如果每个用户都应该有一个<代码> UserInfo < /代码>对象,您可以订阅用户创建信号,并自动为每个创建的用户初始化<代码> UserInfo <代码>对象。还可以使用python hasattr()