Bagaimana cara menangkap beberapa pengecualian dalam satu baris (kecuali blok)
Melakukan hal ini:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Tanda kurung diperlukan karena sintaks lama yang menggunakan koma untuk menetapkan objek kesalahan ke nama. Kata as
kunci digunakan untuk penugasan. Anda dapat menggunakan nama apa pun untuk objek kesalahan, saya lebih suka error
secara pribadi.
Praktek terbaik
Untuk melakukan ini dengan cara yang saat ini dan meneruskan yang kompatibel dengan Python, Anda perlu memisahkan Pengecualian dengan koma dan membungkusnya dengan tanda kurung untuk membedakan dari sintaks sebelumnya yang menetapkan instance pengecualian ke nama variabel dengan mengikuti jenis Pengecualian untuk ditangkap dengan koma.
Berikut adalah contoh penggunaan sederhana:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Saya hanya menetapkan pengecualian ini untuk menghindari menyembunyikan bug, yang jika saya temui saya harapkan jejak stack penuh dari.
Ini didokumentasikan di sini: https://docs.python.org/tutorial/errors.html
Anda dapat menetapkan pengecualian ke variabel, ( e
adalah umum, tetapi Anda mungkin lebih suka variabel yang lebih bertele-tele jika Anda memiliki penanganan pengecualian yang lama atau IDE Anda hanya menyoroti pilihan yang lebih besar dari itu, seperti yang saya miliki.) Contoh memiliki atribut args. Berikut ini sebuah contoh:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Perhatikan bahwa dalam Python 3, err
objek jatuh keluar dari ruang lingkup ketika except
blok disimpulkan.
Usang
Anda dapat melihat kode yang menetapkan kesalahan dengan koma. Penggunaan ini, satu-satunya formulir yang tersedia di Python 2.5 dan sebelumnya, sudah tidak digunakan lagi, dan jika Anda ingin kode Anda maju kompatibel di Python 3, Anda harus memperbarui sintaks untuk menggunakan formulir baru:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Jika Anda melihat penetapan nama koma di basis kode Anda, dan Anda menggunakan Python 2.5 atau lebih tinggi, beralihlah ke cara baru untuk melakukannya sehingga kode Anda tetap kompatibel ketika Anda memutakhirkan.
The suppress
manager konteks
Jawaban yang diterima benar-benar 4 baris kode, minimum:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
The try
, except
, pass
garis dapat ditangani dalam satu baris dengan manajer konteks menekan, tersedia dalam Python 3.4 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
Jadi, ketika Anda ingin pass
pengecualian tertentu, gunakan suppress
.