6

1 対 1 の関係にあるオブジェクト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 に答える