web-dev-qa-db-ja.com

Geopy:キャッチタイムアウトエラー

私は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

前もって感謝します!

19
MoreScratch

これを試して:

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

このアドレスが複数回要求され、 使用ポリシー が原因で一時的にブロックされるか速度が低下したため、この問題が発生している可能性があります。 1秒間に1つ以上のリクエストはないこと、および結果をキャッシュする必要があることを示しています。私はこの問題に出くわしました、そしてあなたはいくつかの解決策を持っています。コードをあまり変更したくない場合は、1日2500リクエストなどに無料で使用できるGoogle APIキーを取得するか、結果をキャッシュできます。私は既に問題のためにAWSでDynamoDBを使用していたので、先に進み、結果をキャッシュするテーブルを作成しました。 コードの要点です

3
tylerjw