Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya boleh Log Pengecualian Tidak Terkendali dalam Python Menggunakan Modul Pengelogan?

Bagaimanakah saya boleh Log Pengecualian Tidak Terkendali dalam Python Menggunakan Modul Pengelogan?

Barbara Streisand
Barbara Streisandasal
2024-10-23 00:10:03839semak imbas

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

Melog Pengecualian Tidak Ditangkap dalam Python

Melainkan dikendalikan secara eksplisit, pengecualian Python dikeluarkan secara lalai kepada aliran ralat standard program (stderr). Walau bagaimanapun, mungkin terdapat keadaan apabila pengecualian yang tidak ditangkap adalah wajar untuk dilog menggunakan modul pengelogan sebaliknya.

Pendekatan tradisional untuk mengelog pengecualian tidak ditangkap adalah dengan menggunakan kaedah logging.exception(e) secara manual dalam blok except , seperti yang ditunjukkan di bawah:

<code class="python">try:
    raise Exception, 'Throwing a boring exception'
except Exception, e:
    logging.exception(e)</code>

Walau bagaimanapun, menggunakan logging.exception(...) secara automatik untuk setiap pengecualian yang tidak ditangkap menghapuskan langkah manual.

Pelaksanaan

Pertimbangkan coretan kod berikut:

<code class="python">import sys
import logging

# Custom logger with handler for stdout
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Custom exception handler to log uncaught exceptions
def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt for Ctrl + C exit
    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))

# Assign custom exception handler
sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

Skrip yang diubah suai ini mencapai beberapa tugas utama:

  • Pengelogan Tersuai: Menggunakan modul pengelogan untuk memformat dan merekodkan pengecualian yang tidak ditangkap.
  • Pengendalian Output Standard: Mengarahkan pengecualian kepada stdout menggunakan pengendali tersuai, memastikan ia dipaparkan dalam tetingkap konsol.
  • Pengendalian Pengecualian Terpilih: Mengabaikan pengecualian KeyboardInterrupt untuk mengekalkan keluar konsol yang anggun melalui Ctrl C.

Dengan mengatasi pengendali pengecualian lalai dengan handle_exception, pengecualian tidak ditangkap secara automatik dilog menggunakan logger yang dikonfigurasikan, meningkatkan keterlihatan dan memudahkan penyahpepijatan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh Log Pengecualian Tidak Terkendali dalam Python Menggunakan Modul Pengelogan?. 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