2016-06-20 5 views
0

У меня есть проект django 1.9, и я использую mongoengine для подключения к экземпляру mongodb.python 3.6 mongoengine не может поймать исключение

У меня есть модель выглядит следующим образом:

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) 

тест Класс:

import web.models as models 
class test: 

    '''Test the accessibility of the business class''' 
    def testBusiness(): 
     employee = models.Employee.objects.create(
      email="[email protected]", 
      first_name="Pedro", 
      last_name="Kong" 
     ) 
     try: 
      employee.save() 
     except pymongo.errors.DuplicateKeyError as e: 
      return "Error" 
     return "Business Tested" 

Проблема заключается в том, что я не могу поймать DuplicateKeyError execption:

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: rockynode.employee.$email_1 dup key: { : "[email protected]" } 

Я попытался с глобальная попытка за исключением, но она по-прежнему выдает код с исключением DuplicateKeyError:

try: 
    employee.save() 
except: 
    return "Error" 
return "Business Tested" 

Для информации я использую следующие зависимости:

Джанго == 1.9.7
mongoengine == 0.10.6
PyMongo == 3.2.2

Reff : get-the-duplicate-value-on-duplicatekeyerror

Любая помощь была бы очень заметна.Thx.

ответ

1

Как вы видели себя в документации, create возвращает сохраненный документ, так что если вы используете его

  • вы не должны сохранить его во второй раз
  • вы должны поймать сохранить исключения в там

    try: 
        employee = models.Employee.objects.create(
         email="[email protected]", 
         first_name="Pedro", 
         last_name="Kong" 
        ) 
    except Exception as e: 
        return "Error \n %s" % (e) 
    return "Business Tested" 
    

или, если вы не используете создавать, но сохранить в отдельном заявлении:

employee = models.Employee(
     email="[email protected]", 
     first_name="Pedro", 
     last_name="Kong" 
    ) 
    try: 
     employee.save() 
    except Exception as e: 
     return "Error \n %s" % (e) 
    return "Business Tested" 
1

Я должен решить проблему.

try except не работает, так как DuplicateKeyError exception не быть вызван из метода save(), но вместо того, чтобы из метода create().

Цитирование из документации: create():

Создать новый объект. Возвращает экземпляр сохраненного объекта.

Раздел код в def create() в коде mongoengine: 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="[email protected]", 
       first_name="Pedro", 
       last_name="Kong" 
      ) 
      employee.save() 
     except Exception as e: 
      return "Error \n %s" % (e) 
     return "Business Tested" 
Смежные вопросы