Melog Pengecualian Tidak Ditangkap dalam Python
Apabila pengecualian berlaku dalam program Python dan tidak dikendalikan dalam blok pelaksanaan semasa, ia secara automatik dicetak kepada ralat piawai (stderr). Tingkah laku ini boleh menyusahkan, terutamanya apabila anda ingin menangkap semua pengecualian untuk tujuan pengelogan atau penyahpepijatan.
Untuk menyelesaikan isu ini, anda boleh mengkonfigurasi modul pengelogan untuk mengeluarkan pengecualian yang tidak ditangkap secara automatik. Berikut ialah penyelesaian yang memanfaatkan fungsi logging.exception():
<code class="python">try: raise Exception('Throwing a boring exception') except Exception as e: logging.exception(e)</code>
Pendekatan ini berkesan, tetapi memerlukan pengendalian dan pengelogan setiap pengecualian secara eksplisit. Untuk penyelesaian yang lebih automatik, anda boleh mengatasi fungsi sys.excepthook Python, yang bertanggungjawab untuk mengendalikan pengecualian yang tidak ditangkap.
Di bawah ialah contoh konfigurasi pengelogan lengkap yang merangkumi ciri tambahan seperti:
<code class="python">import sys import logging logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) def handle_exception(exc_type, exc_value, exc_traceback): if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
Dengan konfigurasi ini disediakan, semua pengecualian yang tidak ditangkap akan dilog secara automatik oleh modul pengelogan.
Atas ialah kandungan terperinci Bagaimana untuk Log Pengecualian Tidak Ditangkap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!