Python: Sekali Coba Beberapa Kecuali

195

Dengan Python, mungkinkah memiliki beberapa exceptpernyataan untuk satu trypernyataan? Seperti :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc
Eva611
sumber
7
@ Eva611: Jangan minta maaf. (1) coba saja. (2) memposting jawaban untuk pertanyaan Anda.
S.Lott
6
Itu berhasil. Sudah mencobanya dengan penerjemah python ...
Eva611
38
@ Eva611 Saya pikir pertanyaan Anda baik-baik saja. Jauh lebih cepat bagi saya untuk Google daripada membuat contoh dalam interpreter Python, jadi saya senang Anda bertanya. DrTysa dan yang lainnya seharusnya merespons dengan "ya" dengan cepat daripada memarahi Anda.
Galarant
5
Sebagian besar waktu tebakan pertama Anda akan salah, atau kehilangan nuansa halus, jadi (seperti 15.000 lainnya) saya mencoba google terlebih dahulu!
Chris
9
Saya mencoba google dan menemukan pertanyaan ini. Oleh karena itu, saya senang orang lain menanyakannya di forum yang begitu publik sebagai SO, dan saya cukup senang dengan orang lain yang terhubung dengannya sehingga algoritma google muncul sebagai hasil pertama saya.
kingledion

Jawaban:

328

Ya itu mungkin.

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

Lihat: http://docs.python.org/tutorial/errors.html

Kata kunci "as" digunakan untuk menetapkan kesalahan ke variabel sehingga kesalahan dapat diselidiki lebih lanjut di kemudian hari dalam kode. Perhatikan juga bahwa tanda kurung untuk kasus pengecualian tiga diperlukan dalam python 3. Halaman ini memiliki lebih banyak info: Tangkap beberapa pengecualian dalam satu baris (kecuali blok)

vartec
sumber
76
Jika Anda ingin melakukan hal yang sama dalam kedua kasus, itu except (SomeError, OtherError):. Tidak menjawab pertanyaan OP, tetapi mungkin membantu beberapa orang yang datang ke sini melalui Google.
Markus
Jika misalnya Anda harus mengonversi beberapa versi struktur data ke struktur baru, saat memperbarui versi kode misalnya, Anda dapat membuat sarang percobaan .. kecuali.
Rolf of Saxony
5
Jika Anda ingin menangani semua pengecualian, Anda harus menggunakan except Exception:alih-alih polos except:. (Polos kecuali akan menangkap genap SystemExitdan KeyboardInterruptyang biasanya bukan yang Anda inginkan)
polvoazul
Anda mungkin ingin melakukan sesuatu dengan ejuga karena Anda memberi nama :)
HelloGoodbye