2012-10-19 36 views
1

也就是說,我想應該是:可能檢測到我是否在Python中的'except'子句之內?

try: 
    print inExceptClause() 
    1/0 
except Exception: 
    print inExceptClause() 
print inExceptClause() 

...這將打印出:

False 
True 
False 
+6

出於好奇,爲什麼你會需要這樣的功能呢? – Blender

+2

'def inExceptClause(answer = False):return answer',在異常之外調用空並且在內部有'True'?但猜測你想要一個與程序相關的指示:) – RocketDonkey

+1

我不確定解釋器中是否有這樣的信息。另外,除了''except'之外,你可以有一個'except',這是另一個'except'外的內容,等等。我能想到的最接近的是'traceback.extract_stack()',但它不會給任何有關excepts的直接信息。 – jsalonen

回答

3

我想你會對此錯誤的方式。你的「用例」看起來像你可以從你的代碼中的多個點調用一個函數,有時候它會在異常處理程序中被調用。在那個函數中,你想知道是否拋出異常,對吧?

關鍵是,你不想在一個函數中擁有(或應該)沒有關於調用代碼的知識...在理想情況下,大多數函數不會有。

也就是說,您可能想執行該功能,但只能部分執行。所以,我建議兩個選項之一:

  1. 分手了功能劃分爲多個功能:一個功能有額外的功能,並且將依次調用其他的功能,具有可重複使用的功能。只需在需要時調用所需的功能。

  2. 向函數中添加一個參數:一個簡單的布爾值可能足以包含或排除該函數的一小部分。

現在,這不是真的回答你的問題,但我有這種感覺,你正在以錯誤的角度看待你的問題......因此,上述建議。

+0

我有一個日誌記錄功能,在我的代碼中的不同位置被調用,如果我可以根據上下文自動對它進行不同的格式化,那將是很好的......但是我認爲,最終你是對的,試圖檢測無論我是否處於除外條款之內,最終都不可靠。我問,因爲我認爲(如果這樣的事情存在),它可能是一種快速的方式來獲得我想要的,幾乎沒有代碼更改......但我想也許在我的異常管理器中設置一些全局變量(或者更好然而,使用上下文管理器)將提供更好的解決方案。 –

相關問題