在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
修改
这是一个并发应用程序,因此在插入可能失败之前检查重复项。
该字段是一个数组,因此很难找出哪一个是重复值。
答案 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及更早版本中,除了错误msg
和code
之外的所有信息都将被丢弃。