web-dev-qa-db-fra.com

Geopy: erreur de timeout de capture

J'utilise geopy pour géocoder certaines adresses et je veux attraper les erreurs de délai d'attente et les imprimer afin de pouvoir effectuer un contrôle de qualité sur l'entrée. Je mets la demande de géocodage dans un try/catch mais cela ne fonctionne pas. Des idées sur ce que je dois faire?

Voici mon code:

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

J'obtiens l'exception suivante:

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

Merci d'avance!

23
MoreScratch

Essaye ça:

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

Vous pouvez également envisager d'augmenter le délai d'expiration de l'appel de géocodage que vous effectuez vers votre géolocalisateur. Dans mon exemple, ce serait quelque chose comme:

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

ou

location = geolocator.geocode(my_address, timeout=None)
33
Imran

Vous rencontrez peut-être ce problème car vous avez essayé de demander cette adresse plusieurs fois et ils vous ont temporairement bloqué ou ralenti en raison de leur politique d'utilisation . Il n'indique pas plus d'une demande par seconde et vous devez mettre vos résultats en cache. J'ai rencontré ce problème et vous avez quelques solutions. Si vous ne voulez pas trop changer votre code, vous pouvez obtenir gratuitement une clé API Google que vous pouvez utiliser pour quelque chose comme 2500 requêtes/jour ou vous pouvez mettre en cache vos résultats. Parce que j'utilisais déjà DynamoDB sur AWS pour mon problème, j'ai continué et j'ai juste créé une table dans laquelle je cache mes résultats. Voici l'essentiel de mon code.

5
tylerjw

J'ai traité le même problème pendant tant de jours, voici mon code:

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

erreur [~ # ~] [~ # ~] Le service a expiré

solution: ajoutez un nouvel attribut qui déclare le délai:

location = geolocator.geocode(address_venue,timeout=10000)
1
meghsat