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

Patricia Arquette
Lepaskan: 2024-10-22 23:00:29
asal
299 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!