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
返回调度(页面,exact_one)
文件“C:\Python27\lib \site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py",第 111 行,在 parse_xml
"(Found %d.)" % len(places))
ValueError: 没有找到一个地标!(找到 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循环的下一个重复,而不是尝试执行当前循环的其余部分——这似乎是正确的做法,因为当前循环的其余部分取决于位置、纬度、lng) .

或者,如果您希望它打印一条消息,请使用

 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 回答