我有一个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语句替换。有更好的方法吗?
答案 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