try:
something here
except:
print('the whatever error occurred.')
Bagaimana saya bisa mencetak kesalahan / pengecualian di except:
blok saya ?
python
exception
error-handling
TIMEX
sumber
sumber
Jawaban:
Untuk Python 2.6 dan yang lebih baru dan Python 3.x:
Untuk Python 2.5 dan sebelumnya, gunakan:
sumber
str( KeyError('bad'))
=>'bad'
- tidak memberi tahu tipe pengecualianprint(repr(e))
;Exception.__str__
implementasi basis hanya mengembalikan pesan pengecualian, bukan tipe. Atau, gunakantraceback
modul, yang memiliki metode untuk mencetak pengecualian saat ini, diformat, atau traceback penuh.The
traceback
Modul menyediakan metode untuk memformat dan mencetak pengecualian dan tracebacks mereka, misalnya ini akan mencetak pengecualian seperti penangan default tidak:Keluaran:
sumber
error_message = traceback.format_exc()
except Exception as ex:
...sys.exc_info()
fungsi dantraceback.print_exc()
fungsi mendapatkannya dari sana. Anda hanya perlu menyampaikan pengecualian secara eksplisit saat tidak menangani pengecualian atau ketika Anda ingin menampilkan info berdasarkan pengecualian yang berbeda.Dalam Python 2.6 atau lebih besar itu sedikit lebih bersih:
Dalam versi yang lebih lama masih cukup mudah dibaca:
sumber
Jika Anda ingin meneruskan string kesalahan, berikut adalah contoh dari Kesalahan dan Pengecualian (Python 2.6)
sumber
(Saya akan meninggalkan ini sebagai komentar pada jawaban @ jldupont, tetapi saya tidak memiliki reputasi yang cukup.)
Saya telah melihat jawaban seperti jawaban @ jldupont di tempat lain juga. FWIW, saya pikir penting untuk dicatat bahwa ini:
akan mencetak output kesalahan
sys.stdout
secara default. Pendekatan yang lebih tepat untuk penanganan kesalahan secara umum adalah:(Perhatikan bahwa Anda harus melakukan
import sys
ini agar berfungsi.) Dengan cara ini, kesalahan dicetakSTDERR
bukanSTDOUT
, yang memungkinkan penguraian / redirection / etc keluaran yang tepat. Saya mengerti bahwa pertanyaannya adalah tentang 'mencetak kesalahan', tetapi tampaknya penting untuk menunjukkan praktik terbaik di sini daripada mengabaikan detail ini yang dapat mengarah pada kode non-standar bagi siapa saja yang pada akhirnya tidak belajar lebih baik.Saya belum menggunakan
traceback
modul seperti pada jawaban Cat Plus Plus, dan mungkin itu cara terbaik, tapi saya pikir saya akan membuang ini di sana.sumber
Python 3:
logging
Alih-alih menggunakan
print()
fungsi dasar ,logging
modul yang lebih fleksibel dapat digunakan untuk mencatat pengecualian. Thelogging
Modul menawarkan banyak fungsi tambahan, pesan penebangan misalnya ke dalam sebuah file log yang diberikan, penebangan pesan dengan cap waktu dan informasi tambahan tentang di mana penebangan terjadi. (Untuk informasi lebih lanjut, lihat dokumentasi resmi .)Mencatat pengecualian dapat dilakukan dengan fungsi tingkat modul
logging.exception()
seperti:Keluaran:
Catatan:
fungsi
logging.exception()
hanya dapat dipanggil dari handler pengecualianyang
logging
modul tidak boleh digunakan dalam penangan logging untuk menghindariRecursionError
(terima kasih @PrakharPandey)Tingkat log alternatif
Dimungkinkan juga untuk mencatat pengecualian dengan tingkat log lain dengan menggunakan argumen kata kunci
exc_info=True
seperti:sumber
Peningkatan kesalahan satu liner dapat dilakukan dengan pernyataan pernyataan jika itu yang ingin Anda lakukan. Ini akan membantu Anda menulis kode yang dapat diperbaiki secara statis dan memeriksa kesalahan lebih awal.
sumber
Seseorang memiliki cukup banyak kontrol di mana informasi dari traceback akan ditampilkan / dicatat ketika menangkap pengecualian.
Kode
akan menghasilkan traceback berikut:
Cetak / Log traceback penuh
Seperti yang telah disebutkan orang lain, Anda dapat menangkap seluruh traceback dengan menggunakan modul traceback:
Ini akan menghasilkan output berikut:
Anda dapat mencapai hal yang sama dengan menggunakan pendataan:
Keluaran:
Cetak / catat nama kesalahan / pesan saja
Anda mungkin tidak tertarik dengan traceback secara keseluruhan, tetapi hanya pada informasi yang paling penting, seperti nama Exception dan pesan Exception, gunakan:
Keluaran:
sumber