追溯(最近一次通话):
文件“ 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/

10-11 19:20