try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Apakah ini benar? Apakah ada cara yang lebih baik untuk menyusun ini? Apakah ini akan mencakup semua pangkalan saya?
python
request
python-requests
John Smith
sumber
sumber
Jawaban:
Lihat dokumen Permintaan pengecualian . Pendeknya:
Untuk menjawab pertanyaan Anda, apa yang Anda tampilkan tidak akan mencakup semua basis Anda. Anda hanya akan menangkap kesalahan terkait koneksi, bukan kesalahan waktu itu.
Apa yang harus dilakukan ketika Anda mengetahui pengecualian benar-benar sesuai dengan desain skrip / program Anda. Apakah bisa diterima untuk keluar? Bisakah Anda melanjutkan dan mencoba lagi? Jika kesalahan adalah bencana besar dan Anda tidak dapat melanjutkan, maka ya, Anda dapat membatalkan program Anda dengan menaikkan SystemExit (cara yang bagus untuk mencetak kesalahan dan panggilan
sys.exit
).Anda bisa menangkap pengecualian kelas dasar, yang akan menangani semua kasus:
Atau Anda dapat menangkapnya secara terpisah dan melakukan hal yang berbeda.
Seperti yang ditunjukkan Christian :
Sebuah contoh:
Akan dicetak:
sumber
socket.timeout
pengecualian jika Anda menggunakan batas waktu: github.com/kennethreitz/requests/issues/1236Satu saran tambahan harus eksplisit. Tampaknya lebih baik beralih dari spesifik ke umum ke tumpukan kesalahan untuk mendapatkan kesalahan yang diinginkan, jadi yang spesifik tidak bisa ditutup oleh kesalahan umum.
vs.
sumber
Objek pengecualian juga berisi respons asli
e.response
, yang dapat berguna jika perlu melihat badan galat sebagai respons dari server. Sebagai contoh:sumber