首頁 > 後端開發 > Python教學 > 在 Python 中,如何在維護原始呼叫堆疊的同時檢查然後重新引發異常?

在 Python 中,如何在維護原始呼叫堆疊的同時檢查然後重新引發異常?

WBOY
發布: 2024-02-08 21:42:14
轉載
514 人瀏覽過

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

問題內容

我遇到了一種情況,我正在捕獲特定的異常類型,檢查異常的消息以檢查它是否確實是我想要捕獲的異常,如果不是,則重新引發異常:

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

這工作正常,但有一個問題。在我重新引發異常的情況下,該異常現在發生在我重新引發它的行(即在 raise e 處),而不是在最初發生異常的位置。這對於調試來說並不理想,因為您想知道原始異常發生在哪裡。

因此我的問題是:有沒有辦法在捕獲異常後重新引發或以其他方式「傳遞」異常,同時保持原始異常位置?

注意:如果您想知道實際情況是什麼:我正在使用 __import__ 動態導入一些模組。我正在捕獲 importerror 來優雅地處理任何這些模組不存在的情況。但是,如果這些模組本身包含引發 importerror 的 import 語句,我希望引發那些「真正的」(從我的應用程式的角度來看)異常 - 並且在調試的原始位置涉及工具。


正確答案


就這樣做:

raise
登入後複製

而不是 raise e。請參閱關於引發異常的教學部分,以及raise 語句的語言參考

以上是在 Python 中,如何在維護原始呼叫堆疊的同時檢查然後重新引發異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板