SeS*_*esa 11 django exception python-3.x
我很难弄清楚这一点。我试图在特定对象不存在的情况下捕获异常,但该行
from django.core.exceptions import DoesNotExist
Run Code Online (Sandbox Code Playgroud)
给我cannot find reference in exeptions.py
警告。如果该文件中未指定异常,我在哪里可以找到它?
Wil*_*sem 18
如果模型未知,则异常称为ObjectDoesNotExists
[Django-doc],因此您将其导入为:
from django.core.exceptions import ObjectDoesNotExist
Run Code Online (Sandbox Code Playgroud)
本Object
是用来避免与混乱DoesNotExist
例外每种模式都有(你可以看到Object
作为所有车型的对象的“泛化”)。
但是请注意,如果您知道您查询的模型的模型是什么,最好使用更受限制的异常,例如:
try:
SomeModel.objects.get(pk=14)
except SomeModel.DoesNotExist:
# ... do something
pass
Run Code Online (Sandbox Code Playgroud)
就像在模型属性 [Django-doc]的文档中指定的一样:
Django 提供了一个
DoesNotExist
异常作为每个模型类的属性,以识别无法找到的对象的类,并允许您使用 try/except捕获特定的模型类。例外是django.core.exceptions.ObjectDoesNotExist
.
这样您就不会 - 偶然地 - 捕获异常,因为无法获取某些(相关)模型。通常,try
-except
块的跨度应尽可能小,并且异常尽可能“显式”。
它应该是ObjectDoesNotExist
:
from django.core.exceptions import ObjectDoesNotExist
Run Code Online (Sandbox Code Playgroud)
您还可以捕获特定模型的异常,如下所示:
from .your_models import ModelClass
ModelClass.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9030 次 |
最近记录: |