try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Czy to jest poprawne? Czy istnieje lepszy sposób na ustrukturyzowanie tego? Czy to obejmie wszystkie moje bazy?
python
request
python-requests
John Smith
źródło
źródło
Odpowiedzi:
Zajrzyj do dokumentacji wyjątków Zgłoszenia . W skrócie:
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:
Lub możesz złapać je osobno i robić różne rzeczy.
Jak zauważył Christian :
Przykład:
Wydrukuje:
źródło
socket.timeout
wyjątki, jeśli używasz limitu czasu: github.com/kennethreitz/requests/issues/1236Jedna dodatkowa sugestia, która ma być jednoznaczna. Wydaje się, że najlepiej jest przechodzić od konkretnego do ogólnego w dół stosu błędów, aby uzyskać pożądany błąd do złapania, więc te konkretne nie są maskowane przez ogólny.
vs
źródło
Obiekt wyjątku zawiera również oryginalną odpowiedź
e.response
, która może być przydatna, jeśli trzeba zobaczyć treść błędu w odpowiedzi z serwera. Na przykład:źródło