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

标签 python django

我有一个 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/

相关文章:

python - 将自动 keystore 导入 python 脚本的任何方法

python - 莫尔斯电码程序不处理带空格的测试用例

python - Django 断言失败 : assertInHTML ('hello' , '<html>hello</html>' )

python - Django TextField 始终是必需的,尽管 blank=True,Null=True

Django 外键下拉

javascript - 如何在 Django 模板中使用 Jquery/Ajax 正确刷新 div

python - 避免迭代太多时间——算法构建

javascript - Linux 上的 Python 和 Spidermonkey Javascript 引擎

python - 将 QTDesigner 与 PyQT 和 Python 2.6 一起使用

python - 如何过滤数据库表行并更新 Django 中的特定列?