運行一些代碼時遇到了一個奇怪的問題。我正在玩在學校中完成的舊python作業 - 將它們嵌入到C#程序中,使用IronPython運行它們等。如何在調試時忽略當前函數中未捕獲的異常?
嵌入代碼的工作方式與我期望的相同,在IronPython交互中運行時也是如此。然後我在一個新的IronPython項目中運行它,發現了一些尷尬的行爲。運行代碼而沒有調試給出了正常的行爲。運行與調試開始發出未處理的異常錯誤(事後看來只是警告,稍後更多)。
這對我來說是個頭疼的人。通過代碼,我發現一切都在發生,正如我應該預料的那樣。但是在某些時候,它會停止並顯示未處理的異常窗口,指向代碼中看似隨機的部分。在找出什麼是錯的嘗試,我想出了這個代碼:
from __future__ import print_function
def raiser():
print('raising an exception')
raise Exception() # unreported exception here
if __name__ == '__main__':
try:
raiser()
except Exception: # but is handled here
print('caught it')
#raiser() # ignoring exceptions would leave this unreported
現在,這裏應該是很明顯這裏發生了什麼。無需調試即可正常運行。在調試時運行它,它停止,顯示有未處理的異常。它是處理,只是不在raiser()
函數的範圍內。那時,我意識到這是一個警告 ... 2個小時的鵝追逐瘋狂過這麼簡單的事情。
- 可以禁止或抑制此警告嗎?
現在這種警告,我可能會期望一個初學者誰需要所有的幫助,他們可以得到,但我遠離初學者對此,並不在意,有異常不處理當前函數範圍,只是它在我的代碼中的某處處理了。我無法在Visual Studio中找到對此在線或任何設置的任何引用。
- 是否有一些新的要求必須聲明調試器會引發異常?
(類似於Java的檢查異常) - 這是否會成爲bug報告的候選人?
這是在Visual Studio 2010 Pro上運行的IronPython 2.7 Stable(我剛安裝幾小時前)。我不記得以前的版本是否有問題,我從來沒有通過調試器試過代碼。
這樣做。我沒有想到必須添加例外。我認爲安裝程序會這樣做,或者至少它會被列出。儘管現在問題是調試器不會報告任何合法未捕獲的異常。 – 2011-04-08 18:57:15
[已報道](http://ironpython.codeplex.com/workitem/30502)。 – 2011-04-08 19:40:23
我也遇到過這個問題,並且我已經將這個報告轉發到http://pytools.codeplex.com/workitem/358的pytools codeplex,希望能夠吸引更多人關注這個問題。 – Aphex 2011-07-14 20:44:37