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

get_coords()例外処理を使用して、関数を次のよう に書き換えることもできます。

def get_coords(doc):
    try:
        longs, lat = doc
        return lat, longs
    catch TypeError:
        return None, None
于 2012-12-03T07:25:13.017 に答える
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値は 2 つの項目であるため、関数を呼び出すときは、2 つの戻り項目を受け入れる準備が必要であることに注意してください。にない場合はcoordinatesdoc返し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 に答える