Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Log Pengecualian Tidak Ditangkap Secara Automatik dalam Python?

Bagaimanakah Saya Boleh Log Pengecualian Tidak Ditangkap Secara Automatik dalam Python?

Patricia Arquette
Patricia Arquetteasal
2024-10-22 23:00:29387semak imbas

How Can I Automatically Log Uncaught Exceptions in Python?

Melog Pengecualian Tidak Ditangkap dalam Python

Menangkap dan mengendalikan pengecualian adalah penting untuk pengendalian ralat dalam Python. Walau bagaimanapun, bagaimana pula dengan pengecualian yang tidak ditangkap yang sebaliknya akan dicetak ke output ralat standard (stderr)?

Pengendalian Pengecualian Tersuai

Walaupun sentiasa dinasihatkan untuk menangkap dan mengendalikan pengecualian secara eksplisit, kadangkala ia boleh mudah untuk mengautomasikan pengelogan pengecualian yang tidak ditangkap. Daripada bergantung pada blok cuba/kecuali, penyelesaian berikut membenarkan pengelogan berlaku secara automatik:

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

# Create a custom exception handler
def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    # Use the logging module to handle the uncaught exception
    logger = logging.getLogger(__name__)
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Replace the default exception handler with our custom one
sys.excepthook = handle_exception

# Set up a logger and handler
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Raise an exception to test the custom exception handling
if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

Penjelasan

Kod ini menyelesaikan beberapa tugas:

  • Mencipta fungsi pengendali pengecualian tersuai (handle_exception) yang mengambil parameter pengecualian standard (exc_type, exc_value dan exc_traceback).
  • Dalam handle_exception, kod mengabaikan pengecualian KeyboardInterrupt (supaya anda boleh menggunakan Ctrl C untuk keluar dari program seperti biasa ).
  • Pengecualian tidak ditangkap dilog menggunakan modul pengelogan, dengan mesej tersuai "Pengecualian tidak ditangkap" dan butiran pengecualian.
  • Pengendali pengecualian tersuai didaftarkan sebagai pengendali pengecualian lalai, menggantikan Python's tingkah laku lalai mencetak ke stderr.

Dengan mengautomasikan pengelogan pengecualian yang tidak ditangkap, pendekatan ini memudahkan pengendalian ralat dan menyediakan lokasi pusat untuk menyemak semua pengecualian yang berlaku semasa pelaksanaan program, sama ada ia ditangkap atau tidak .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Pengecualian Tidak Ditangkap Secara Automatik 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