0
import csv
from geopy import geocoders
import time

g = geocoders.GeocoderDotUS()

spamReader = csv.reader(open('locations.csv', 'rb'), delimiter='\t', quotechar='|')

f = open("output.txt",'w')

for row in spamReader:
    a = ', '.join(row)
    #exactly_one = False
    time.sleep(1)


    place, (lat, lng) = g.geocode(a)


    if None in (lat, lng):
        f.write("none")
    else:
        b = str(place) + "," + "[" + str(lat) + "," + str(lng) + "]" + "\n"
        print b
        f.write(b)

したがって、GeocoderDotUS がアドレスを見つけられない場合、None を返すことを確立しました。None をチェックしようとするスクリプトをいくつか書きましたが、まだこのトレースが返されているようです。私は少し困惑しています。

Traceback (most recent call last):
File "C:\Users\Penguin\workspace\geocode-nojansdatabase\src\GeocoderDotUS.py", line 17, in <module>
place, (lat, lng) = g.geocode(a)
TypeError: 'NoneType' object is not iterable

None systax のチェックにエラーがありますか? 助けてくれてありがとう....

4

2 に答える 2

1

geopy については何も知りませんが、問題はまさにあなたが言ったことのようです。ジオコードが見つからない場合、None を返します。 要素としてNoneを持つタプルではありません。したがって、結果を緯度と経度に割り当てる前に、なしを確認する必要があります。何かのようなもの:

geoResult = g.geocode(a)
if geoResult is None:
    f.write("none")

# If we get here, the result is not None and we can proceed normally
place, (lat, lng) = geoResult
b = "..." # continue with your processing here
于 2012-06-02T20:22:50.490 に答える
1

エラー メッセージでわかるように、問題はplace, (lat, lng) = ...行にあります。

Noneを返すのはg.geocode calllです (そして、これをすぐに変数とタプルに割り当てようとしますが、明らかに失敗するはずです)。placelat, lng

したがって、次の行に沿って何かを試してください。

result = g.geocode(a)
if result:
    place, (lat, lng) = result
else:
    # ...
于 2012-06-02T20:20:46.103 に答える