2013-04-05 190 views
7

我讀寫前一陣子一些Python代碼,並發現這一點:蟒蛇嘗試除0

try: 
    # do some stuff 
except 0: 
    # exception handling stuff 

而且我不知道是哪除了0手段?我有我的猜測:假設沒有捕獲任何東西,即讓異常傳播,或者它可能是某種開關打開和關閉調試模式,通過刪除0然後捕獲所有內容。

任何人都可以借鑑一些見解嗎?谷歌搜索什麼都沒有產生...

謝謝!

一些示例代碼(按要求):

  try: 
       if logErrors: 
        dbStuffer.setStatusToError(prop_id, obj) 
        db.commit() 
      except 0: 
       traceback.print_exc() 
+2

你確定它沒有被寫入,除了:0嗎? (注意冒號的位置) – NPE 2013-04-05 14:03:44

+0

NPE我是積極的,我現在正在查看差異。但我會假設除了:0將相當於除了:pass? – mlnyc 2013-04-05 14:07:20

+0

運行它時是否出現錯誤? – 2013-04-05 14:08:49

回答

2

從我個人理解,這是一個用於調試目的非常有用的(捕獲異常的類型)

在您的例子0用作佔位符,確定異常的類型。

>>> try: 
... x = 5/1 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'a' is not defined 
>>> try: 
... x = 5/0 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ZeroDivisionError: integer division or modulo by zero 

在第一種情況中,例外的是NameError並且在第二ZeroDivisionError0充當任何類型的捕獲異常的佔位符。

>>> try: 
... print 'error' 
... except: 
... 
KeyboardInterrupt 
>>> try: 
... x = 5/0 + 4*a/3 
... except: 
... print 'error' 
... 
error 
+1

這與沒有'try'-'except'聲明完全相同。 「0:除外」實際上並沒有做任何事情。 – omz 2013-04-05 14:14:56

+0

在except塊中的'raise'以重新引發異常會做同樣的事情would not it – 2013-04-05 14:15:06

+0

它正在節省您重新格式化一個(可能長的)代碼塊來做到這一點,然而(因此調試參考我猜)。 – FatalError 2013-04-05 14:15:48

1

Python docs

「[...]的[除]子句與異常匹配,如果生成的對象是‘相容的’,不同之處一個目的是用一個異常,如果它兼容。是異常對象的類或基類,或者包含與異常兼容的項的元組。

實際上,表達式的類型用於確定except子句是否匹配異常。由於0是整數類型,並且該類型的例外將匹配。

由於不能將整數提升爲例外,因此這是禁用的except類,它不會捕獲任何內容。

+1

你不能在Python中引發整數異常。 TypeError:2.7.3上的異常必須是舊式類或派生自BaseException,而不是int' – 2013-04-05 14:19:03

+0

@AhmedAeonAxan你是對的。我只是試了一下。答案已被編輯。 – Ber 2013-04-05 14:22:57

+0

我認爲在某個時刻(在遙遠的過去),你可能會'提高int,0',我認爲這會觸發except子句中的代碼。現在該語句在** runtime **引發了一個異常,但不是** parse-time **,所以代碼可能從未更新過。 [reference1](http://docs.python.org/release/2.3/ref/raise.html)[reference2](http://docs.python.org/release/2.3/ref/try.html) – mgilson 2013-04-05 14:23:23