我遇到了一種情況,我正在捕獲特定的異常類型,檢查異常的消息以檢查它是否確實是我想要捕獲的異常,如果不是,則重新引發異常:
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中文網其他相關文章!