Rumah >pembangunan bahagian belakang >Tutorial Python >Dalam Python, bagaimana saya boleh menyemak dan kemudian membuang semula pengecualian sambil mengekalkan timbunan panggilan asal?

Dalam Python, bagaimana saya boleh menyemak dan kemudian membuang semula pengecualian sambil mengekalkan timbunan panggilan asal?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBke hadapan
2024-02-08 21:42:14535semak imbas

在 Python 中,如何在维护原始调用堆栈的同时检查然后重新引发异常?

Kandungan soalan

Saya menghadapi situasi di mana saya menangkap jenis pengecualian tertentu, menyemak mesej pengecualian untuk menyemak sama ada ia memang pengecualian yang saya mahu tangkap, dan jika tidak, buang semula pengecualian:

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e

Ini berfungsi dengan baik, tetapi ada masalah. Dalam kes di mana saya menaikkan semula pengecualian, pengecualian kini berlaku pada baris di mana saya menaikkannya semula (iaitu pada raise e ), dan bukannya di lokasi asal pengecualian itu berlaku. Ini tidak sesuai untuk nyahpepijat, kerana anda ingin tahu di mana pengecualian asal berlaku.

Jadi soalan saya ialah: Adakah terdapat cara untuk melontar semula atau sebaliknya "melepasi" pengecualian selepas menangkapnya, sambil mengekalkan lokasi pengecualian asal?

NOTA: Jika anda tertanya-tanya apa sebenarnya yang berlaku: Saya menggunakan pernyataan import __import__ 动态导入一些模块。我正在捕获 importerror 来优雅地处理任何这些模块不存在的情况。但是,如果这些模块本身包含引发 importerror di mana saya mahu pengecualian "sebenar" (dari perspektif aplikasi saya) dibangkitkan - dan di tempat asal penyahpepijatan di mana alat terlibat.


Jawapan Betul


Buat ini sahaja:

raise

bukannya raise e。请参阅关于引发异常的教程部分,以及raise. Lihat bahagian tutorial tentang Melempar pengecualian dan raise pernyataan

: 🎜

Atas ialah kandungan terperinci Dalam Python, bagaimana saya boleh menyemak dan kemudian membuang semula pengecualian sambil mengekalkan timbunan panggilan asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam