2011-10-09 56 views
0
try: 
    os.execvp('sqlite3', args) 
except OSError, er: 
    if er.errno == 2: #file not found 
     raise OSError, _("sqlite3 executable not found. Is it installed?") 
    else: 
     raise 
except: 
    raise 

在上面的代碼中,except聲明捕捉OSError但什麼是er變量立場?呃這裏代表什麼?

編輯:這只是除了OSError;有沒有辦法除了任何錯誤,並獲得它的異常對象?

回答

2

er是被except子句捕獲的實際異常對象。

1

er是異常對象本身。

5

正如其他人所說,er是異常的實例化形式,OSError

如果它是有幫助的,這裏是一個另類,有些更明確的語法,使用as關鍵字:

try: 
    os.execvp('sqlite3', args) 
except OSError as er: 
    if er.errno == 2: #file not found 
     raise OSError(_("sqlite3 executable not found. Is it installed?")) 
    else: 
     raise 
except: 
     raise 

其中,對我說,er將是一個OSError

由於as er語法是順便在Python 2.6中添加的。

+2

那麼你也有樂趣警告由於老','語法,其中一些像'除了KeyError,ValueError:'不會做你可能期望的事情 - 它會捕獲一個'KeyError'並將它賦值給局部變量'ValueError'。所以'除了(KeyError,ValueError):'需要 –

+0

確實發現了! – 2011-10-09 08:39:35

+1

我也更新了這個答案,以便刪除棄用的舊式異常提升('raise Exception,message')以支持新的樣式('raise Exception(message)')。 '將使用除'.. as'形式之外的新風格,您應該使用更新的raise語法(即已被支持更長時間)。 –

1

看起來像ER是一個例外對象(類型OSERROR的也像其持有的錯誤。 ER可能代表錯誤。

+0

@這只是一個除了OSError有沒有辦法除了任何錯誤,並獲得它的異常對象? –

+0

您可以創建一個包含您想要的OSError,RuntimeError,TypeError,NameError錯誤類型的類/結構,以便您可以一次使用所有數據類型。我不確定python是否有這樣的默認情況下,但這可能工作。 – zeitue