Geopy异常处理

时间:2012-05-27 07:10:04

标签: python exception geopy

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

1 个答案:

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

或类似的东西。