Django チュートリアルのコード:
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# The rest of code...
ここに 2 つの例外があるのはなぜですか?KeyError
とChoice.DoesNotExist
?
彼らは平等ではありませんか?それらの違いは何ですか?
Django チュートリアルのコード:
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# The rest of code...
ここに 2 つの例外があるのはなぜですか?KeyError
とChoice.DoesNotExist
?
彼らは平等ではありませんか?それらの違いは何ですか?
KeyError
によって引き上げられる可能性がありますrequest.POST['choice']
。存在しないキーにアクセスしようとすると発生する辞書の Python エラーです。
DoesNotExist
データベースからオブジェクトを取得しようとして、それが存在しない場合に発生する DB インターフェイスの Django フレームワーク エラーです。
Choice.DoesNotExist
から継承しますDoesNotExist
が、モデルに対してのみであるため、次のChoice
ようなことをしたときにChoice.objects.get(...)
インスタンスが存在しない場合に発生します。
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