Bagaimana saya bisa mendapatkan nama pengecualian yang dimunculkan dengan Python?
misalnya,
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
Misalnya, saya menangkap beberapa (atau semua) pengecualian, dan ingin mencetak nama pengecualian tersebut dalam pesan kesalahan.
python
exception
exception-handling
Rob Bednark
sumber
sumber
except NameError:
) untuk memulai?traceback
modul pustaka standar , yang memiliki fungsi yang melakukan beberapa pemformatan bagus untuk pengecualian dan pelacakan ulang.except
pernyataan mereka sendiri , tetapi entri log sangat mirip dalam setiap kasus.Jawaban:
Berikut adalah beberapa cara berbeda untuk mendapatkan nama kelas dari pengecualian:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
misalnya,
sumber
Ini berfungsi, tetapi sepertinya pasti ada cara yang lebih mudah dan langsung?
sumber
except Exception as exception
dengan jenis pengecualian yang ingin Anda tangkap, yaituexcept NameError as exception
.Anda juga bisa menggunakan
sys.exc_info()
.exc_info()
mengembalikan 3 nilai: type, value, traceback. Tentang dokumentasi: https://docs.python.org/3/library/sys.html#sys.exc_infosumber
Jika Anda menginginkan nama kelas yang sepenuhnya memenuhi syarat (misalnya,
sqlalchemy.exc.IntegrityError
bukan hanyaIntegrityError
), Anda dapat menggunakan fungsi di bawah ini, yang saya ambil dari jawaban MB yang luar biasa untuk pertanyaan lain (saya baru saja mengganti nama beberapa variabel agar sesuai dengan selera saya):Contoh:
sumber
Jawaban lain di sini bagus untuk tujuan eksplorasi, tetapi jika tujuan utamanya adalah mencatat pengecualian (termasuk nama pengecualian), mungkin pertimbangkan untuk menggunakan logging.exception daripada print?
sumber