2015-01-13 24 views
11

Używam geopy do geokodowania niektórych adresów i chcę złapać błędy limitu czasu i wydrukować je, aby można było przeprowadzić kontrolę jakości na wejściu. Wysyłam żądanie geocode w próbie/catch, ale to nie działa. Jakieś pomysły na temat tego, co muszę zrobić?Geopy: błąd przekroczenia limitu czasu

Oto mój kod:

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

otrzymuję następujący wyjątek:

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 

Z góry dziękuję!

+1

Łapiesz zły wyjątek; wyjątkiem jest "GeocoderTimedOut". –

Odpowiedz

15

Spróbuj tego:

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

Można również rozważyć zwiększenie limitu czasu na Geokodując zadzwonić robicie do geolocator. W moim przykładzie będzie to coś takiego:

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

lub

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

Po prostu wiadomość, wiadomość wewnątrz 'e' w błędzie GeocoderTimedOut wydaje się być' .message' teraz zamiast '.msg' –

+0

.msg nie działa –

1

może być taki problem, ponieważ starał się zwrócić tym adresem wiele razy i oni tymczasowo zablokował Cię lub zwolnił cię z powodu ich usage policy. Nie podaje więcej żądań niż jedna na sekundę i że należy buforować wyniki. Wpadłem na ten problem i masz kilka rozwiązań. Jeśli nie chcesz zbytnio zmieniać kodu, możesz uzyskać klucz Google API, którego możesz używać za około 2500 żądań dziennie za darmo lub możesz buforować wyniki. Ponieważ już używałem DynamoDB na AWS dla mojego problemu, poszedłem dalej i właśnie stworzyłem tabelę, w której zapisuję moje wyniki. Here is the gist of my code.

Powiązane problemy