我有一些错误处理的Python代码,但由于某些原因,代码似乎仍然无法处理这个特定的错误:
raise GQueryError("No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.")
geopy.geocoders.google.GQueryError: No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.
这是来源:
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)
try:
place, (lat, lng) = g.geocode(a)
except ValueError:
#print("Error: geocode failed on input %s with message %s"%(a, error_message))
continue
b = str(place) + "," + str(lat) + "," + str(lng) + "\n"
print b
f.write(b)
我没有包含足够的错误处理吗?我的印象是"除了ValueError"会处理这种情况,但我一定是错的。
提前感谢您的帮助!
P.S。我把它从代码中删除了,但我不知道它到底意味着什么:
def check_status_code(self,status_code):
if status_code == 400:
raise GeocoderResultError("Bad request (Server returned status 400)")
elif status_code == 500:
raise GeocoderResultError("Unkown error (Server returned status 500)")
elif status_code == 601:
raise GQueryError("An empty lookup was performed")
elif status_code == 602:
raise GQueryError("No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.")
elif status_code == 603:
raise GQueryError("The geocode for the given location could be returned due to legal or contractual reasons")
elif status_code == 610:
raise GBadKeyError("The api_key is either invalid or does not match the domain for which it was given.")
elif status_code == 620:
raise GTooManyQueriesError("The given key has gone over the requests limit in the 24 hour period or has submitted too many requests in too short a period of time.")
答案 0 :(得分:5)
现在try / except只捕捉ValueError
s。要同时捕获GQueryError
,请将except ValueError:
行替换为:
except (ValueError, GQueryError):
或者如果GQueryError不在你的命名空间中,你可能需要这样的东西:
except (ValueError, geocoders.google.GQueryError):
或者捕获ValueError以及check_status_code
中列出的所有错误:
except (ValueError, GQueryError, GeocoderResultError,
GBadKeyError, GTooManyQueriesError):
(同样,如果错误位置不在您的命名空间中,请将geocoders.google.
或错误位置添加到所有地理错误的前面。)
或者,如果您只想捕获所有可能的异常,您可以这样做:
except:
但这通常是不好的做法,因为它也会在你的place, (lat, lng) = g.geocode(a)
行中发现语法错误,你不想抓住它,所以最好检查一下geopy代码来找到所有的它可能会抛出你想抓住的可能例外。希望所有这些都列在你找到的那段代码中。