Geopy 异常处理
Posted
技术标签:
【中文标题】Geopy 异常处理【英文标题】:Geopy exception handling 【发布时间】:2012-05-27 07:10:04 【问题描述】:回溯(最近一次通话最后一次): 文件“C:\Users\Penguin\workspace\geocode-nojansdatabase\src\geocode.py”,第 15 行,在 地点, (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,exact_one) 文件“C:\Python27\lib\site-packages\geopy-0.94.2-py2.7.egg\geopy\geocoders\google.py”,第 88 行,位于 geocode_url 返回调度(页面,exact_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 个。)
当 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】:要让您的程序忽略 ValueError 而不是终止它,请通过替换来捕获异常:
place, (lat, lng) = g.geocode(a)
与:
try:
place, (lat, lng) = g.geocode(a)
except ValueError:
continue
(continue
使它进入 for 循环的下一个重复,而不是尝试执行当前循环的其余部分 - 这似乎是正确的做法,因为当前循环的其余部分取决于地点、纬度、经度)。
或者,如果您希望它打印一条消息,请使用
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
或者类似的东西。
【讨论】:
以上是关于Geopy 异常处理的主要内容,如果未能解决你的问题,请参考以下文章
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )