获取DuplicateKeyError上的重复值

时间:2013-12-05 09:18:52

标签: python python-2.7 pymongo

在pymongo中,当DuplicateKeyError被捕获时,找出异常背后的重复值的正确方法是什么?

目前我这样做

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]

它似乎有用,但是有更简单的方法,比如

try:
    db.coll.insert({key: ['some_value', 'some_value_1']})
except pymongo.errors.DuplicateKeyError, e:
    print e.dup_val

修改

这是一个并发应用程序,因此在插入可能失败之前检查重复项。

该字段是一个数组,因此很难找出哪一个是重复值。

1 个答案:

答案 0 :(得分:7)

pymongo(2.7)的开发版中,您可以使用error_document属性进行检查:

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

据我所知,在2.6及更早版本中,除了错误msgcode之外的所有信息都将被丢弃。