我正在浏览我的集合并返回坐标信息,但是当它遇到空记录时会抛出此错误:
a=get_coords(doc['coordinates']['coordinates'])
print a
这是函数get_coords:
def get_coords(doc):
if doc == None:
pass
else:
longs, lat = doc
return lat, longs
错误:
TypeError: 'NoneType' object has no attribute '__getitem__'
然后停止我的查询,不再返回任何记录。
我如何防止这种情况发生,我的意思是我仍然希望它继续搜索其他记录,而不是停止使用此错误消息。
由于
感谢他们的回答,他们都帮了忙。我能够通过以下方式完成它:
if doc['coordinates']==None:
pass
else:
b=get_coords(doc['coordinates']['coordinates'])
print b
我在首次检查集合中确实存在doc之后执行此操作。现在它似乎打印了集合中的所有现有坐标。
谢谢
答案 0 :(得分:2)
我不确定你打印b
的原因,因为上面的代码中没有定义。也许你的意思是a
?
无论哪种方式,你都应该能够:
if doc==None:
pass
else:
a=get_coords(doc['coordinates']['coordinates'])
print b
或者您想对doc
做些什么。如果某些doc
项目没有coordinates
,则您需要为此做类似的事情。
答案 1 :(得分:1)
doc
总是会有coordinates
属性吗?如果是这样,该字典是否总会有另一个coordinates
属性?假设doc
将始终是字典(即使只是空白字典),您可以尝试:
In [90]: def get_coords(doc):
....: if doc.get('coordinates', None):
....: if doc['coordinates'].get('coordinates', None):
....: return doc['coordinates']['coordinates']
....: return None, None
....:
In [91]: doc
Out[91]:
{'coordinates': {u'coordinates': [-81.453134399999996, 28.5287337],
u'type': u'Point'}}
In [92]: get_coords(doc)
Out[92]: [-81.453134399999996, 28.5287337]
In [93]: new_doc = {'coordinates': {u'type': u'Point'}}
In [94]: get_coords(new_doc)
Out[94]: (None, None)
In [95]: empty_doc = {}
In [96]: get_coords(empty_doc)
Out[96]: (None, None)
请注意,return
值是两个项目,因此当您调用该函数时,您需要准备好接受两个返回项目。如果coordinates
中没有doc
,则会返回None, None
。
In [101]: lat, long = get_coords(doc)
In [102]: lat
Out[102]: -81.453134399999996
In [103]: long
Out[103]: 28.5287337
答案 2 :(得分:1)
您还可以使用异常处理来重写get_coords()
函数,如下所示:
def get_coords(doc):
try:
longs, lat = doc
return lat, longs
catch TypeError:
return None, None