/ / Geopy z obsługą błędów - python, geopy

Geopy z obsługą błędów - python, geopy

Mam trochę kodu Pythona z obsługą błędów w miejscu, ale z jakiegoś powodu kod nadal wydaje się być w stanie obsłużyć ten konkretny błąd:

raise GQueryError("No corresponding geographic location could be found for the     specified location, possibly because the address is relatively new, or because it may be incorrect.")
geopy.geocoders.google.GQueryError: No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.

To jest źródło:

import csv
from geopy import geocoders
import time

g = geocoders.Google()

spamReader = csv.reader(open("locations.csv", "rb"), delimiter="t", quotechar="|")

f = open("output.txt","w")

for row in spamReader:
a = ", ".join(row)
#exactly_one = False
time.sleep(1)

try:
place, (lat, lng) = g.geocode(a)
except ValueError:
#print("Error: geocode failed on input %s with message %s"%(a, error_message))
continue

b = str(place) + "," + str(lat) + "," + str(lng) + "n"
print b
f.write(b)

Czy nie uwzględniłem wystarczającej ilości błędów w obsłudze? Miałem wrażenie, że "z wyjątkiem ValueError" poradziłbym sobie z tą sytuacją, ale muszę się mylić.

Z góry dziękuję za pomoc!

P.S. Wyciągnąłem to z kodu, ale nie wiem, co to naprawdę znaczy:

   def check_status_code(self,status_code):
if status_code == 400:
raise GeocoderResultError("Bad request (Server returned status 400)")
elif status_code == 500:
raise GeocoderResultError("Unkown error (Server returned status 500)")
elif status_code == 601:
raise GQueryError("An empty lookup was performed")
elif status_code == 602:
raise GQueryError("No corresponding geographic location could be found for the specified location, possibly because the address is relatively new, or because it may be incorrect.")
elif status_code == 603:
raise GQueryError("The geocode for the given location could be returned due to legal or contractual reasons")
elif status_code == 610:
raise GBadKeyError("The api_key is either invalid or does not match the domain for which it was given.")
elif status_code == 620:
raise GTooManyQueriesError("The given key has gone over the requests limit in the 24 hour period or has submitted too many requests in too short a period of time.")

Odpowiedzi:

5 dla odpowiedzi № 1

Teraz try / except to tylko łapanie ValueErrors. Złapać GQueryError również, zamień except ValueError: linia z:

except (ValueError, GQueryError):

Lub jeśli GQueryError nie znajduje się w twojej przestrzeni nazw, możesz potrzebować czegoś takiego:

except (ValueError, geocoders.google.GQueryError):

Lub złapać ValueError i wszystkie błędy wymienione w check_status_code:

except (ValueError, GQueryError, GeocoderResultError,
GBadKeyError, GTooManyQueriesError):

(Ponownie, dodaj geocoders.google. lub jakakolwiek lokalizacja błędu znajduje się na początku wszystkich błędów geopii, jeśli nie znajdują się w twojej przestrzeni nazw.)

Lub, jeśli chcesz uchwycić wszystkie możliwe wyjątki, możesz po prostu:

except:

ale na ogół jest to zła praktyka, ponieważ spowoduje również przechwycenie błędów składni w twoim place, (lat, lng) = g.geocode(a) linii, której nie chcesz złapać, więc jest lepiejzbadać kod geopy, aby znaleźć wszystkie możliwe wyjątki, które może rzucić, które chcesz złapać. Mam nadzieję, że wszystkie są wymienione w tym kodzie znalezionego kodu.