1

Django チュートリアルのコード:

try:
    selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# The rest of code...

ここに 2 つの例外があるのはなぜですか?KeyErrorChoice.DoesNotExist?

彼らは平等ではありませんか?それらの違いは何ですか?

4

2 に答える 2

5

KeyErrorによって引き上げられる可能性がありますrequest.POST['choice']。存在しないキーにアクセスしようとすると発生する辞書の Python エラーです。

DoesNotExistデータベースからオブジェクトを取得しようとして、それが存在しない場合に発生する DB インターフェイスの Django フレームワーク エラーです。

Choice.DoesNotExistから継承しますDoesNotExistが、モデルに対してのみであるため、次のChoiceようなことをしたときにChoice.objects.get(...)インスタンスが存在しない場合に発生します。

于 2013-09-13T11:26:29.427 に答える
0

request.POST['choice']失敗した場合、生成されますKeyError

もう1つは次のとおりです。

exception ObjectDoesNotExist

    The DoesNotExist exception is raised when an object is not found for the given parameters of a query.

を入れないKeyErrorと、システムはエラーを発生させ、キャプチャされないexceptため役に立たなくなり、その逆も同様です。KeyError

于 2013-09-13T11:26:52.950 に答える