我有一个集合,其中包含每个文档的一组字段值。其中一个称为“坐标”。现在,当我查询数据库以及该字段的非空元素时,它会返回正确的值,如我所料。
但是我现在遇到这个错误然后在python(Pymongo)中:
if not doc['coordinates']
TypeError: 'NoneType' object has no attribute '__getitem__'
这似乎暗示它已经遇到没有字段“坐标”的记录。我创建了这个字段并且应该存在的文档。
我想知道,我该如何处理此错误并防止此错误终止我的程序。
这就是我找到相应查询的方式:
cursor = collection.find(
{ "$and" : [
{"term": {"$in": events}},
{ "$or" : [
{"coordinates" : {"$ne": None}},
{"place" : {"$ne" : None}}
]}
]},
{"term" : 1, "coordinates" : 1, "place" : 1, "time_normal" : 1}, tailable = True, timeout = False )
然后我遍历返回的查询,如下:
while cursor.alive:
try:
doc = cursor.next()
CODE IS HERE TO QUERY DB
except StopIteration:
pass
谢谢
答案 0 :(得分:2)
您在示例中获得TypeError
的原因以及nickmilon提供的示例中的AttributeError
是因为您用来获取doc
的查询不是找到任何东西(因此是NoneType
)。检查您的查询,以确保您实际上从收集中获取信息。
但是,nickmilon提供的答案应该为您提供错误处理。
答案 1 :(得分:1)
你可以尝试:doc.get('coordinates')如果字段不存在则返回None或者如果存在则返回值
答案 2 :(得分:1)
Eric是对的,出于某种原因你的doc是None。你能在这里发布用于查找的代码以及如何处理从find返回的光标吗?
答案 3 :(得分:0)
我能够通过在异常块中包含TypeError来处理此错误,如:
try:
if not doc['coordinates']:
CODE HERE
else:
CODE HERE
except (TypeError):
pass