Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Pengendalian Pengecualian Tersuai dengan Modul Pengelogan Python?

Bagaimana untuk Melaksanakan Pengendalian Pengecualian Tersuai dengan Modul Pengelogan Python?

DDD
DDDasal
2024-10-22 22:46:03432semak imbas

How to Implement Custom Exception Handling with Python's Logging Module?

Pengendalian Ralat Tersuai dengan Modul Pengelogan Python

Memastikan pengecualian yang tidak ditangkap dikendalikan dan dilog dengan betul boleh menjadi penting untuk menyelesaikan masalah dan mengekalkan kestabilan aplikasi Python. Walaupun menangkap dan mengelog pengecualian secara manual adalah pendekatan yang berdaya maju, ia boleh membosankan dan terdedah kepada ralat.

Untuk menangani isu ini, Python membenarkan anda mengatasi mekanisme pengendalian pengecualian lalai dan mengalihkan pengecualian yang tidak ditangkap ke modul pengelogan. Ini menyediakan cara yang mudah dan sistematik untuk menangkap dan mencatat maklumat pengecualian terperinci.

Penyelesaian

Masalah yang dikemukakan boleh diselesaikan dengan mengubah suai fungsi sys.excepthook global. Dengan mentakrifkan pengendali pengecualian tersuai, anda boleh memintas semua pengecualian yang tidak ditangkap dan mengendalikannya seperti yang dikehendaki. Berikut ialah contoh yang lengkap dan kukuh:

<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):
    # Ignore KeyboardInterrupt so the application can exit with Ctrl + C
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    # Log the uncaught exception
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_exception

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

Penjelasan

Kod ini:

  • Mentakrifkan pengendali pengecualian tersuai, handle_exception, yang digunakan apabila pengecualian tidak ditangkap berlaku.
  • Abaikan KeyboardInterrupt (Ctrl C) untuk membenarkan aplikasi keluar dengan anggun.
  • Log pengecualian tidak ditangkap menggunakan kaedah ralat() modul pengelogan.
  • Melampirkan pengendali pengecualian tersuai pada fungsi sys.excepthook.
  • Meningkatkan ralat masa jalan untuk menunjukkan pengendalian ralat tersuai.

Apabila pengecualian yang tidak ditangkap dinaikkan, tersuai pengendali pengecualian campur tangan dan log butiran pengecualian kepada pengendali yang dikonfigurasikan. Dalam kes ini, pengendali strim lalai digunakan untuk mengeluarkan maklumat pengecualian kepada stdout.

Ciri Tambahan

Contohnya juga termasuk beberapa ciri pilihan:

  • Penapisan: Abaikan jenis pengecualian tertentu (cth., KeyboardInterrupt) dengan menggunakan semakan subkelas.
  • Penyesuaian: Ubah suai pengendali pengelogan atau gunakan berbilang pengendali untuk mengawal format output dan destinasi log pengecualian.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Pengecualian Tersuai dengan Modul Pengelogan 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