追踪(最近一次通话):
文件“C:\ Users \ Penguin \ workspace \ geocode-nojansdatabase \ src \ geocode.py”,第15行,中
place,(lat,lng)= g.geocode(a)
在地理编码中的文件“C:\ Python27 \ lib \ site-packages \ geopy-0.94.2-py2.7.egg \ geopy \ geocoders \ google.py”,第81行
return 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中
return dispatch(page,exact_one)
文件“C:\ Python27 \ lib \ site-packages \ geopy-0.94.2-py2.7.egg \ geopy \ geocoders \ google.py”,第111行,在parse_xml中
“(找到%d。)”%len(地方))
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)
答案 0 :(得分:2)
要使程序忽略ValueError而不是终止它,请通过替换:
来捕获异常 place, (lat, lng) = g.geocode(a)
使用:
try:
place, (lat, lng) = g.geocode(a)
except ValueError:
continue
(continue
使得它转到for循环的下一个重复,而不是尝试执行当前循环的其余部分 - 这似乎是正确的事情,因为当前循环的其余部分取决于地点,lat,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
或类似的东西。