我有一个 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 语句替代。有更好的方法吗?
最佳答案
我会说处理异常是 pythonic 方法。你可以这样做:
try:
# do your thing when user.user_info exists
except AttributeError: # Be explicit with catching exceptions.
# Redirect.
有一个编程概念叫做请求宽恕比请求许可更容易(EAFP)
,它在 Python 中被广泛使用。我们假设给定对象存在属性、键等,并在它们不存在时捕获异常。
这里有一些关于 EAFP 的引用资料和 SO 问题。
Python glossary
What is the EAFP principle in Python
EAFP and what is really exceptional
关于Python Django 检查属性是否存在或已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124850/