未能发现重复错误

时间:2018-02-22 08:46:49

标签: mongodb python-2.7 pymongo

from pymongo.errors import DuplicateKeyError

def insert_duplicate_token(self):
        try:                       
            fields = ..
            token = Token.create_a_new_document(fields)
            token.save()
            token = Token.create_a_new_document(fields)
            token.save()

            self.logger.info('success')

        except DuplicateKeyError:
            self.logger.exception('Duplicate caught')

        except Exception, err:
            self.logger.exception('failed...')
            return False

引发的错误是     你试图保存重复的唯一密钥(E11000重复密钥错误集合:oauth_test.tokens索引:idx_access_token dup密钥:{:" gRULKp6sqPWRYDrJNrvaifMhlaC8qvzfZOpqTZLTPxHnQ691vT"})'

但是被Exception捕获,而不是DuplicateKeyError

尝试了

import pymongo
pymongo.errors - does not exists

这是stacktrace

Traceback (most recent call last):
  File "move_invalid_tokens_worker.py", line 91, in insert_duplicate_token
    token.save()
  File "/Users/ohadperry/.virtualenvs/oauth/lib/python2.7/site-packages/mongoengine/document.py", line 386, in save
    raise NotUniqueError(message % unicode(err))
NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error collection: oauth_test.tokens index: access_token_1 dup key: { : "MIeJey0f3rWkedMZacDIjDMB3a04ilrbdieKaZ2BWt0lI0sATP" })

怪异..

1 个答案:

答案 0 :(得分:1)

我用stackstrace回答了自己,感谢@Arount

from pymongo.errors import DuplicateKeyError
from mongoengine import NotUniqueError 

def insert_duplicate_token(self):
        try:                       
            fields = ..
            token = Token.create_a_new_document(fields)
            token.save()
            token = Token.create_a_new_document(fields)
            token.save()

            self.logger.info('success')

        except (NotUniqueError, DuplicateKeyError), error:
            self.logger.exception('Duplicate caught')

        except Exception, error:
            self.logger.exception('failed...')
            return False