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语句替代。有更好的方法吗?
- 尝试埃多克斯和埃多克斯1
- 另一个考虑因素是,如果每一个用户都应该有一个EDOCX1[…]2>的话,您可以下载一个用户创建信号,并为每一个用户创建一个EDOCX1[…]2>的对象。Docs.Djangoproject.com/en/dev/topics/signals
- Stackoverflow.com/questions/610883/…
我想说,除了例外,处理这件事是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和真正的例外