6

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

4

1 回答 1

12

我会说处理异常是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 术语表
Python EAFP 中的 EAFP 原理是
什么,什么是真正的例外

于 2013-04-20T20:29:55.630 回答