Bagaimana untuk Log Pengecualian Tidak Ditangkap dalam Python?

DDD
Lepaskan: 2024-10-22 23:54:29
asal
842 orang telah melayarinya

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

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

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!

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
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!