25

我正在使用 geopy 对一些地址进行地理编码,我想捕捉超时错误并将它们打印出来,以便我可以对输入进行一些质量控制。我将地理编码请求放在 try/catch 中,但它不起作用。关于我需要做什么的任何想法?

这是我的代码:

try:
  location = geolocator.geocode(my_address)               
except ValueError as error_message:
  print("Error: geocode failed on input %s with message %s"%(a, error_message))

我得到以下异常:

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

先感谢您!

4

3 回答 3

40

尝试这个:

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))

您还可以考虑增加对地理定位器进行地理编码调用的超时时间。在我的示例中,它将类似于:

location = geolocator.geocode(my_address, timeout=10)

或者

location = geolocator.geocode(my_address, timeout=None)
于 2015-01-13T04:22:54.177 回答
7

我处理了同样的问题这么多天,这是我的代码:

geolocator = Nominatim(user_agent="ny_explorer")
location = geolocator.geocode(address_venue)

ERROR 服务超时

解决方案:添加一个声明超时的新属性:

location = geolocator.geocode(address_venue,timeout=10000)
于 2020-01-26T06:17:15.860 回答
5

您可能会遇到此问题,因为您尝试多次请求此地址,但由于他们的使用政策,他们暂时阻止了您或减慢了您的速度。它声明每秒请求不超过一个,并且您应该缓存结果。我遇到了这个问题,你有几个解决方案。如果您不想过多地更改代码,您可以获得一个 Google API 密钥,您可以将其用于每天 2500 次免费请求,或者您可以缓存您的结果。因为我已经在 AWS 上使用 DynamoDB 来解决我的问题,所以我继续创建了一个表来缓存我的结果。 这是我的代码的要点。

于 2017-05-23T05:35:34.027 回答