neu*_*ont 3 python pymongo python-2.7
在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]
Run Code Online (Sandbox Code Playgroud)
它似乎工作,但有更简单的方法,如
try:
db.coll.insert({key: ['some_value', 'some_value_1']})
except pymongo.errors.DuplicateKeyError, e:
print e.dup_val
Run Code Online (Sandbox Code Playgroud)
编辑
它是一个并发应用程序,因此在插入可能失败之前检查重复项.
该字段是一个数组,因此很难找出哪个是重复值.
在pymongo(2.7)的开发版中,您可以查看error_document属性:
try:
db.coll.insert({name: 'some_value'})
except pymongo.errors.DuplicateKeyError, e:
print e.error_document
Run Code Online (Sandbox Code Playgroud)
据我所知,在2.6及更早版本中,除了误差所有的信息msg和code被丢弃.