python - Django try/except on DoesNotExist 仍然抛出它
问题描述
我正在为DoesNotExist
我的应用程序中的错误而苦苦挣扎。关键是我真的不明白为什么会抛出这个错误,因为我已经处理了它:
import socket
from django.core.exceptions import ObjectDoesNotExist
from django.db import Models
class MyClass(models.Model):
name = models.CharField(max_length=250, default=socket.gethostname(), unique=True)
@staticmethod
def update_some_list(some_list):
for some_item in some_list:
try:
MyClass.objects.get(name=some_item)
except ObjectDoesNotExist: # I also tried with MyClass.DoesNotExist
MyClass.objects.create(name=some_item)
这里的重点是,当我遇到这段代码时,我有一些被丢弃的“模块级”DoesNotExist,就好像这个 try/except 块永远不会被命中:
Traceback (most recent call last):
File "/app/backend/shared/models.py", line 201, in update_some_list
MyClass.objects.get(name=some_item)
File "/usr/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/django/db/models/query.py", line 399, in get
self.model._meta.object_name
shared.models.DoesNotExist: MyClass matching query does not exist.
解决方案
考虑使用QuerySet.get_or_create,这将消除上述问题。
MyClass.objects.get_or_create(name=some_item)
另外,请注意,如果您访问 @staticmethod 中的类,则将其更新为@classmethod是有意义的。另外,在您遇到的问题中:
from django.db import Models
而不是从 django.db 导入模型
推荐阅读
- swift - Swift,带有完成处理程序的网络调用不起作用
- c++ - 错误:无法将“float*”转换为“float”作为回报
- oracle - 当视图用于显示 Oracle Apex 中的现有记录时,如何在表中更新或创建新记录?
- python - 如何从嵌套列表中按 IP 地址提取端口
- mysql - sql 对 USERS 销售额求和
- django - Django elasticsearch DSL DRF 建议问题
- reactjs - Algolia instasearch 设计,如 reactjs.org 上的点击量 - reactjs
- yocto - Yocto 在 64 位系统上为 32 位构建了一些食谱
- rust - 货物功能是否可以删除依赖项?
- firebase - 我们可以在 Firebase 测试实验室中使用 flutter_driver 运行自动化测试吗?