Get the duplicate value on DuplicateKeyError

pymongo, python, python-2.7

Solution

In dev version of `pymongo` (2.7) you can check with `error_document` property:

try:
    db.coll.insert({name: 'some_value'})
except pymongo.errors.DuplicateKeyError, e:
    print e.error_document

As far as I know, in 2.6 and earlier versions, all info except error `msg` and `code` is discarded.

Problem

In pymongo, when a `DuplicateKeyError` caught, what's the proper way to find out the duplicate value behind the the exception? Currently I do this ``` try: db.coll.insert({key: ['some_value', 'some_value_1']}) except pymongo.errors.DuplicateKeyError, e: dups = re.findall(r'\{\ +:\ +"(.*)"\ +\}$', e.message) if len(dups) == 1: print dups[0] ``` It seems to work, but is there any easier way, like ``` try: db.coll.insert({key: ['some_value', 'some_value_1']}) except pymongo.errors.DuplicateKeyError, e: print e.dup_val ``` EDIT It's a concurrent app, so check duplicates before insert might fail. The field is an array, so it's hard to find out which one is the duplicate value.

Original source