【发布时间】:2019-02-26 13:52:46
【问题描述】:
我无法弄清楚这一点。我试图在特定对象不存在的情况下捕获异常,但是该行
from django.core.exceptions import DoesNotExist
给我cannot find reference in exeptions.py 警告。如果该文件中没有指定异常,我在哪里可以找到它?
【问题讨论】:
标签: django python-3.x exception
我无法弄清楚这一点。我试图在特定对象不存在的情况下捕获异常,但是该行
from django.core.exceptions import DoesNotExist
给我cannot find reference in exeptions.py 警告。如果该文件中没有指定异常,我在哪里可以找到它?
【问题讨论】:
标签: django python-3.x exception
异常被称为<b>Object</b>DoesNotExists [Django-doc],以防模型未知,因此您将其导入为:
from django.core.exceptions import <b>Object</b>DoesNotExist
Object 用于避免与每个模型都有的 DoesNotExist 异常混淆(您可以将 Object 视为所有模型对象的“概括”)。
但是请注意,如果您知道您查询的模型的模型是什么,最好使用更受限制的异常,例如:
try:
SomeModel.objects.get(pk=14)
except SomeModel.DoesNotExist:
# ... do something
pass
就像model attributes [Django-doc]的文档中指定的那样:
Django 提供
DoesNotExist异常作为每个模型类的属性,以识别无法找到的对象类并允许您捕获特定的模型类 使用 try/except。例外是django.core.exceptions.ObjectDoesNotExist的子类。
这样您就不会意外捕获异常,因为某些(相关)模型无法获取。通常,try-except 块的跨度应尽可能小,异常应尽可能“显式”。
【讨论】:
DoesNotExist 异常吗?当我尝试使用 SomeModel.DoesNotExist 替代方案时,PyCharm CE 抱怨 unresolved attribute reference for class MyClass。
DoesNotExist 异常。
from django.core.exceptions import ObjectDoesNotExist
您还可以像这样捕获特定模型的异常:
from .your_models import ModelClass
ModelClass.DoesNotExist
【讨论】: