2013-10-25 109 views
1
try: 
    #statement 1 
    #statement 2 
except Exception, err: 
    print err 
    pass 

這可能是很微不足道,但我從來沒有真正想過這個問題到現在爲止,我發現自己不能夠回答以下問題:Python的嘗試,除了

  1. 是否語句2被如果執行聲明1中出現錯誤?

  2. 在語句1和語句2出現錯誤的情況下,Exception如何處理?在上面的代碼中打印出哪個錯誤?都?

+0

用於您的問題,這可能有助於使「點擊」在你的腦海:如果有一個錯誤在陳述1中,你怎樣才能保證陳述2會做正確的事情? – Izkata

+0

@Izkata touche。 – ealeon

+0

你從來沒有想過只是自己嘗試一下嗎? – poke

回答

6

答案對您的兩個問題都是「否」。

只要一個錯誤是在try/except塊拋出,try部分立刻退出:

>>> try: 
...  1/0 
...  print 'hi' 
... except ZeroDivisionError, e: 
...  print 'error' 
... 
error 
>>> 

正如你看到的,代碼不會繼續執行print 'hi'一部分,儘管我做了一個except爲了它。

您可以閱讀更多here

1

1)是否如果錯誤在聲明中 1提出聲明2被執行?

不,語句2不執行

2)如何異常處理的情況下將錯誤上調 兩個語句1和語句2?上面代碼中的 打印出哪個錯誤?都?

唯一的語句1有一定機率產生一個錯誤,見上面,

注意:如果你想聲明2始終執行,你可以使用finally與嘗試/除

3

在一個異常被提出的控制離開try區塊在異常被引發的時候被提供給合適的except區塊。如果語句1拋出異常,語句2將不會執行。

這也回答了你的第二個問題:你描述的場景不可能發生。

3

1)如果語句1中出現錯誤,語句2是否被執行?

號異常將被提出和捕獲。 據我瞭解蟒蛇將向上移動堆棧和呼叫者查找異常處理程序

2)如何異常處理在引發錯誤兩種說法1和2陳述的情況下?在上面的代碼中打印出哪個錯誤?都?

語句2將不會被運行,因此沒有例外將提高它

try塊中的任何異常都將被捕獲。這就是爲什麼對於所有try/except子句,將try子句限制爲必需的絕對最小代碼量。再次,這避免了掩蓋錯誤。

7

從Python文檔:

如果try子句執行過程中發生異常,該條款的其餘部分被跳過。然後,如果它的類型匹配以except關鍵字命名的異常,則會執行except子句,然後在try語句之後繼續執行。

因此,一旦發生錯誤,它會跳到異常

http://docs.python.org/2/tutorial/errors.html

+5

+1引用文檔。 – cdhowie