Geopy: catch timeout error
我正在使用geopy对一些地址进行地理编码,我想捕获超时错误并打印出来,以便可以对输入进行质量控制。 我正在将地址解析请求放入try / catch中,但无法正常工作。 关于我需要做什么的任何想法?
这是我的代码:
1 2 3 4 | try: location = geolocator.geocode(my_address) except ValueError as error_message: print("Error: geocode failed on input %s with message %s"%(a, error_message)) |
我得到以下异常:
1 2 3 | File"/usr/local/lib/python2.7/site-packages/geopy/geocoders/base.py", line 158, in _call_geocoder raise GeocoderTimedOut('Service timed out') geopy.exc.GeocoderTimedOut: Service timed out |
先感谢您!
尝试这个:
1 2 3 4 5 6 7 8 9 10 11 | from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOut my_address = '1600 Pennsylvania Avenue NW Washington, DC 20500' geolocator = Nominatim() try: location = geolocator.geocode(my_address) print(location.latitude, location.longitude) except GeocoderTimedOut as e: print("Error: geocode failed on input %s with message %s"%(my_address, e.message)) |
您也可以考虑增加对地理定位器的地理编码调用的超时时间。 在我的示例中,它将类似于:
1 | location = geolocator.geocode(my_address, timeout=10) |
要么
1 | location = geolocator.geocode(my_address, timeout=None) |
您可能遇到此问题,是因为您尝试多次请求此地址,并且由于其使用策略,他们暂时阻止了您或使您减速。 它指出每秒的请求数不超过一个,并且您应该缓存结果。 我遇到了这个问题,您有几个解决方案。 如果您不想太多更改代码,则可以获取Google API密钥,该密钥可以免费用于每天2500个请求,也可以缓存结果。 因为我已经在AWS上使用DynamoDB来解决问题,所以我继续进行操作,并创建了一个表,将结果缓存在其中。这是我的代码的要旨。