1

トレースバック (最後の最後の呼び出し):
ファイル "C:\Users\Penguin\workspace\geocode-nojansdatabase\src\geocode.py"、15 行目
、(lat, lng) = g.geocode(a)
ファイル " C:\Python27\lib\site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py"、81 行目、ジオコードで
self.geocode_url(url, exact_one)
ファイル "C: \Python27\lib\site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py"、88 行目、geocode_url で
ディスパッチ (ページ、正確に 1 つ) を返す
ファイル "C:\Python27\lib \site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py"、111 行目、parse_xml
"(Found %d.)" % len(places))
ValueError: しませんでした目印を 1 つだけ見つけてください。(3つ見つかりました。)

geopy が気に入らないアドレスに遭遇すると、アプリケーションが終了します。私が疑問に思っているのは、Python で例外をキャプチャして、プログラムが次のエントリに移動できるようにする方法です。ソースコードは以下です。

import csv
from geopy import geocoders
import time

g = geocoders.Google()

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)
     b = "\"" + str(place) + "\"" + "," + str(lat) + "," + str(lng) + "\n"
     print b
     f.write(b)
4

1 に答える 1

3

プログラムが ValueError で終了するのではなく無視するようにするには、次のように置き換えて例外をキャッチします。

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

と:

 try:
     place, (lat, lng) = g.geocode(a)
 except ValueError:
     continue

(continue現在のループの残りの部分を実行しようとする代わりに、for ループの次の繰り返しに進みます。現在のループの残りの部分は場所、緯度、経度に依存するため、これは正しいことのように思えます) .

または、メッセージを印刷する場合は、

 try:
     place, (lat, lng) = g.geocode(a)
 except ValueError as error_message:
     print("Error: geocode failed on input %s with message %s"%(a, error_message))
     continue

または、それらの線に沿った何か。

于 2012-05-27T07:32:30.317 に答える