python 3.6 mongoengine 无法捕获异常
python 3.6 mongoengine cannot catch exception
我有一个 django 1.9 项目,正在使用 mongoengine 连接到 mongodb 实例。
我有一个模型如下:
from django.db import models
from mongoengine import *
class Employee(Document):
email = StringField(required=True, unique=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
测试class:
import web.models as models
class test:
'''Test the accessibility of the business class'''
def testBusiness():
employee = models.Employee.objects.create(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
try:
employee.save()
except pymongo.errors.DuplicateKeyError as e:
return "Error"
return "Business Tested"
问题是我无法捕获 DuplicateKeyError
执行:
pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: rockynode.employee.$email_1 dup key: { : "pedro.kong@company.com" }
我尝试使用 global try except 但它仍然使代码崩溃并出现 DuplicateKeyError
异常:
try:
employee.save()
except:
return "Error"
return "Business Tested"
有关信息,我正在使用以下依赖项:
Django==1.9.7
mongoengine==0.10.6
pymongo==3.2.2
参考:get-the-duplicate-value-on-duplicatekeyerror
任何帮助都将是高度 appreciable.Thx。
我必须解决这个问题。
try except
没有工作,因为 DuplicateKeyError exception
不是从 save()
方法触发的,而是从 create()
方法触发的。
引用文档:create() :
Create new object. Returns the saved object instance.
mongoengine代码中def create()
中的代码段:Reff:Monogoengine code清楚地表明create()
函数调用了save()
函数:
从 mongoengine 代码中提取:
def create(self, **kwargs):
"""Create new object. Returns the saved object instance.
.. versionadded:: 0.4
"""
return self._document(**kwargs).save()
因此我的 try
块必须包含 create()
方法,如下所示:
try:
employee = models.Employee.objects.create(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
employee.save()
except Exception as e:
return "Error \n %s" % (e)
return "Business Tested"
正如您在文档中看到的那样,create
returns 一个保存的文档,所以如果您使用它
- 您不必再次保存
你必须在那里捕获保存异常
try:
employee = models.Employee.objects.create(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
except Exception as e:
return "Error \n %s" % (e)
return "Business Tested"
或者如果您不使用创建但保存在单独的语句中:
employee = models.Employee(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
try:
employee.save()
except Exception as e:
return "Error \n %s" % (e)
return "Business Tested"
我有一个 django 1.9 项目,正在使用 mongoengine 连接到 mongodb 实例。
我有一个模型如下:
from django.db import models
from mongoengine import *
class Employee(Document):
email = StringField(required=True, unique=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
测试class:
import web.models as models
class test:
'''Test the accessibility of the business class'''
def testBusiness():
employee = models.Employee.objects.create(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
try:
employee.save()
except pymongo.errors.DuplicateKeyError as e:
return "Error"
return "Business Tested"
问题是我无法捕获 DuplicateKeyError
执行:
pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: rockynode.employee.$email_1 dup key: { : "pedro.kong@company.com" }
我尝试使用 global try except 但它仍然使代码崩溃并出现 DuplicateKeyError
异常:
try:
employee.save()
except:
return "Error"
return "Business Tested"
有关信息,我正在使用以下依赖项:
Django==1.9.7
mongoengine==0.10.6
pymongo==3.2.2
参考:get-the-duplicate-value-on-duplicatekeyerror
任何帮助都将是高度 appreciable.Thx。
我必须解决这个问题。
try except
没有工作,因为 DuplicateKeyError exception
不是从 save()
方法触发的,而是从 create()
方法触发的。
引用文档:create() :
Create new object. Returns the saved object instance.
mongoengine代码中def create()
中的代码段:Reff:Monogoengine code清楚地表明create()
函数调用了save()
函数:
从 mongoengine 代码中提取:
def create(self, **kwargs):
"""Create new object. Returns the saved object instance.
.. versionadded:: 0.4
"""
return self._document(**kwargs).save()
因此我的 try
块必须包含 create()
方法,如下所示:
try:
employee = models.Employee.objects.create(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
employee.save()
except Exception as e:
return "Error \n %s" % (e)
return "Business Tested"
正如您在文档中看到的那样,create
returns 一个保存的文档,所以如果您使用它
- 您不必再次保存
你必须在那里捕获保存异常
try: employee = models.Employee.objects.create( email="pedro.kong@company.com", first_name="Pedro", last_name="Kong" ) except Exception as e: return "Error \n %s" % (e) return "Business Tested"
或者如果您不使用创建但保存在单独的语句中:
employee = models.Employee(
email="pedro.kong@company.com",
first_name="Pedro",
last_name="Kong"
)
try:
employee.save()
except Exception as e:
return "Error \n %s" % (e)
return "Business Tested"