2015-01-13 1 views
11

geopyを使用していくつかのアドレスをジオコードしています。タイムアウトエラーをキャッチしてプリントアウトして、入力の品質管理をしたいと思います。私はジオコード要求をtry/catchに入れていますが、動作していません。私が何をする必要があるかに関するアイデア?ここでGeopy:キャッチタイムアウトエラー

は私のコードです:

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 

を事前にありがとうございます!

+1

間違った例外があります。キャッチする必要がある例外は 'GeocoderTimedOut'です。 –

答えて

15

これを試してみてください:

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

はまた、あなたはgeolocatorに作っている呼び出しジオコードにタイムアウトを増やすことを検討することができます。あなたはこのアドレスを複数回要求しようとしましたが、彼らは一時的にあなたをブロックしたりためのあなたをスローダウンするのであなたがこの問題を経験することができる

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

または

location = geolocator.geocode(my_address, timeout=None) 
+2

GeocoderTimedOutエラーの 'e'内のメッセージは、' .msg'の代わりに '.message'になっているようです。 –

+0

.msgは動作していません –

1

:私の例では、ようなものになるだろう彼らのusage policy。 1秒間に1回以上のリクエストがないこと、および結果をキャッシュする必要があることを示します。私はこの問題に遭遇し、あなたはいくつかの解決策を持っています。あなたのコードを変更したくない場合は、無料で2,500リクエスト/日のようなものに使用できるGoogle APIキーを取得するか、結果をキャッシュすることができます。私の問題のためにAWSで既にDynamoDBを使用していたので、先に進み、結果をキャッシュするテーブルを作成しました。Here is the gist of my code.