也就是說,我想應該是:可能檢測到我是否在Python中的'except'子句之內?
try:
print inExceptClause()
1/0
except Exception:
print inExceptClause()
print inExceptClause()
...這將打印出:
False
True
False
也就是說,我想應該是:可能檢測到我是否在Python中的'except'子句之內?
try:
print inExceptClause()
1/0
except Exception:
print inExceptClause()
print inExceptClause()
...這將打印出:
False
True
False
我想你會對此錯誤的方式。你的「用例」看起來像你可以從你的代碼中的多個點調用一個函數,有時候它會在異常處理程序中被調用。在那個函數中,你想知道是否拋出異常,對吧?
關鍵是,你不想在一個函數中擁有(或應該)沒有關於調用代碼的知識...在理想情況下,大多數函數不會有。
也就是說,您可能想執行該功能,但只能部分執行。所以,我建議兩個選項之一:
分手了功能劃分爲多個功能:一個功能有額外的功能,並且將依次調用其他的功能,具有可重複使用的功能。只需在需要時調用所需的功能。
向函數中添加一個參數:一個簡單的布爾值可能足以包含或排除該函數的一小部分。
現在,這不是真的回答你的問題,但我有這種感覺,你正在以錯誤的角度看待你的問題......因此,上述建議。
我有一個日誌記錄功能,在我的代碼中的不同位置被調用,如果我可以根據上下文自動對它進行不同的格式化,那將是很好的......但是我認爲,最終你是對的,試圖檢測無論我是否處於除外條款之內,最終都不可靠。我問,因爲我認爲(如果這樣的事情存在),它可能是一種快速的方式來獲得我想要的,幾乎沒有代碼更改......但我想也許在我的異常管理器中設置一些全局變量(或者更好然而,使用上下文管理器)將提供更好的解決方案。 –
該函數返回提供有關當前正在處理的異常信息 三個值中的一個元組。 (...)如果堆棧中任何地方都沒有處理 異常,則會返回一個包含 三個None值的元組。
參見下列問題:
Python 3 traceback fails when no exception is active
Raising exceptions when an exception is already present in Python 3
出於好奇,爲什麼你會需要這樣的功能呢? – Blender
'def inExceptClause(answer = False):return answer',在異常之外調用空並且在內部有'True'?但猜測你想要一個與程序相關的指示:) – RocketDonkey
我不確定解釋器中是否有這樣的信息。另外,除了''except'之外,你可以有一個'except',這是另一個'except'外的內容,等等。我能想到的最接近的是'traceback.extract_stack()',但它不會給任何有關excepts的直接信息。 – jsalonen