Zajrzyj do dokumentacji wyjątków Zgłoszenia . W skrócie:
W przypadku problemu z siecią (np. Awaria DNS, odmowa połączenia itp.) Żądania zgłoszą ConnectionError
wyjątek.
W przypadku rzadkiej niepoprawnej odpowiedzi HTTP Żądania zgłoszą HTTPError
wyjątek.
Jeśli upłynie limit czasu żądania, Timeout
zgłaszany jest wyjątek.
Jeśli żądanie przekroczy skonfigurowaną liczbę maksymalnych przekierowań, TooManyRedirects
zgłaszany jest wyjątek.
Wszystkie wyjątki, które żądania jawnie wywołują, dziedziczą requests.exceptions.RequestException
.
Aby odpowiedzieć na twoje pytanie, to, co pokażesz, nie obejmie wszystkich twoich baz. Złapiesz tylko błędy związane z połączeniem, a nie te, które przekroczą limit czasu.
Co zrobić, gdy złapiesz wyjątek, tak naprawdę zależy od projektu twojego skryptu / programu. Czy można wyjść? Czy możesz kontynuować i spróbować ponownie? Jeśli błąd jest katastrofalny i nie można go kontynuować, to tak, możesz przerwać program, podnosząc SystemExit (dobry sposób na wydrukowanie błędu i wywołanie sys.exit
).
Możesz złapać wyjątek klasy podstawowej, który będzie obsługiwał wszystkie przypadki:
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.RequestException as e: # This is the correct syntax
raise SystemExit(e)
Lub możesz złapać je osobno i robić różne rzeczy.
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.Timeout:
# Maybe set up for a retry, or continue in a retry loop
except requests.exceptions.TooManyRedirects:
# Tell the user their URL was bad and try a different one
except requests.exceptions.RequestException as e:
# catastrophic error. bail.
raise SystemExit(e)
Jak zauważył Christian :
Jeśli chcesz, aby błędy http (np. 401 nieautoryzowane) zgłaszały wyjątki, możesz zadzwonić Response.raise_for_status
. To podniesie HTTPError
, jeśli odpowiedź była błędem http.
Przykład:
try:
r = requests.get('http://www.google.com/nothere')
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)
Wydrukuje:
404 Client Error: Not Found for url: http://www.google.com/nothere