追溯(最近一次通话):
文件“ C:\ Users \ Penguin \ workspace \ geocode-nojansdatabase \ src \ geocode.py”,第15行
地点,(纬度,经度)= g.geocode(a)
地理编码中的文件“ C:\ Python27 \ lib \ site-packages \ geopy-0.94.2-py2.7.egg \ geopy \ geocoders \ google.py”,第81行
返回self.geocode_url(url,fully_one)
文件“ C:\ Python27 \ lib \ site-packages \ geopy-0.94.2-py2.7.egg \ geopy \ geocoders \ google.py”,第88行,在geocode_url中
返回调度(页面,完全为一)
parse_xml中的文件“ C:\ Python27 \ lib \ site-packages \ geopy-0.94.2-py2.7.egg \ geopy \ geocoders \ google.py”,第111行
“(找到%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)
最佳答案
要使您的程序忽略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
或类似的规定。
关于python - Geopy异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10772269/