1

我正在浏览我的收藏并返回坐标信息,但是当它遇到空记录时会引发此错误:

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

在首先检查集合中确实存在文档后,我会执行此操作。现在似乎打印集合中的所有现有坐标。

谢谢

4

3 回答 3

2

我不确定你为什么要打印b,因为上面的代码中没有定义。也许你的意思是a

无论哪种方式,您都应该能够:

if doc==None:
   pass
else:
   a=get_coords(doc['coordinates']['coordinates'])
   print b

或任何你想做的事情doc。如果某些doc项目没有,coordinates您需要为此做类似的事情。

于 2012-11-25T02:32:53.540 回答
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)

注意returnvalue是两个item,所以调用函数的时候需要准备好接受两个return item。如果没有coordinatesin doc,它将返回None, None

In [101]: lat, long = get_coords(doc)

In [102]: lat
Out[102]: -81.453134399999996

In [103]: long
Out[103]: 28.5287337
于 2012-11-25T02:46:20.420 回答
1

您还可以使用异常处理来重写get_coords()函数,如下所示:

def get_coords(doc):
    try:
        longs, lat = doc
        return lat, longs
    catch TypeError:
        return None, None
于 2012-12-03T07:25:13.017 回答