2012-11-25 41 views
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 

我做到这一点首先检查确实是有集合中的一个文档后。它现在似乎打印集合中的所有现有坐标。

感谢

回答

2

我不知道为什么你打印b,因为这不是在上面的代码中定义。也许你的意思是a

无论哪种方式,你应该能够做到:

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

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

+1

感谢突出使用var b中的错字。我已经用你的建议更新了我的功能,它仍然发送相同的错误。 – user94628

+0

好的,感谢您的更新!它仍然返回一个错误,因为你不能在NoneType上调用doc ['coordinates'] ['coordinates']'...所以我会尝试编辑我的答案以满足你的需要......等等,试试我的实际的代码:也就是说,不要在'get_coords'函数中使用'if'语句,而应该使用类似的方式。 – rofls

+0

我会尝试改变我的答案,如果它仍然不适合你,但请尝试更接近我的答案:不要求'doc ['coordinates'] ['coordinates']'直到* after * you知道'doc'存在。 – rofls

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值是两个项目,所以当你调用该函数,你需要做好准备,接受两个退换货品。如果doc中没有coordinates,则将返回None, None

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

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

In [103]: long 
Out[103]: 28.5287337 
+0

感谢您的帮助,是的文档将有一个坐标属性和一个。我喜欢你解决这个问题的方式。我会发现它有帮助。 – user94628

+1

@ user94628没有问题:)另外,一个快速的Python提示 - 如果你有像'if x == None'这样的比较,你可以说'if not x',这是一个更多Pythonic。 – RocketDonkey

+0

感谢您的提示,我试图变得更pythonic,但仍试图打破Java的习惯。 – user94628

1

你也可以使用异常处理来重写get_coords()功能是这样的:

def get_coords(doc): 
    try: 
     longs, lat = doc 
     return lat, longs 
    catch TypeError: 
     return None, None