Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Log Pengecualian Tidak Ditangkap dalam Python?

Bagaimana untuk Log Pengecualian Tidak Ditangkap dalam Python?

DDD
DDDasal
2024-10-22 23:54:29847semak imbas

How to Log Uncaught Exceptions in Python?

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:

  • Mengabaikan peristiwa sampukan papan kekunci (Ctrl C) untuk membenarkan program keluar anggun
  • Menggunakan keupayaan pemformatan modul pengelogan untuk pelaporan pengecualian
  • Mengoutputkan pengecualian yang tidak dikendalikan kepada stdout dan bukannya stderr
<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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn