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?

WBOY
Lepaskan: 2024-02-08 21:42:14
ke hadapan
517 orang telah melayarinya

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

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

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!

sumber:stackoverflow.com
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