跟踪(最近一次调用):
"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行,以地理代码表示
返回self.geocode_url(url,exactly_one)
"C:\Python27\lib\site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py",文件第88行,在geocode_url中
返回调度(页面,exactly_one)
"C:\Python27\lib\site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py",文件第111行,在parse_xml中
“(发现%d.)”%len(Places)
ValueError:没有找到确切的一个地名!(发现3.)
当重力场遇到一个它不喜欢的地址时,我的应用程序终止。我想知道的是,如何在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)发布于 2012-05-27 07:32:30
要使程序忽略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或者其他类似的东西。
https://stackoverflow.com/questions/10772269
复制相似问题