2008-11-07 33 views
36

在例如一個簡單的目錄創建操作,我可以作出這樣的OSERROR:是否有從Python的OSError獲取信息的跨平臺方式?

(Ubuntu Linux操作系統)

​​

現在我能趕上這個錯誤是這樣的:

>>> import os 
>>> os.mkdir('foo') 
>>> try: 
...  os.mkdir('foo') 
... except OSError, e: 
...  print e.args 
... 
(17, 'File exists') 

是否有一種跨平臺的方式,我可以知道17或「文件存在」總是意味着同一件事,這樣我可以根據情況採取不同的行爲?

(這想出了during another question。)

回答

52

errno屬性上的錯誤應該是在所有平臺上是相同的。你會在Windows上得到WindowsError例外,但由於這是OSError的一個子類,所以相同的「except OSError:」塊將會捕獲它。 Windows確實有自己的錯誤代碼,這些代碼可以通過.winerror訪問,但.errno屬性應該仍然存在,並且可以跨平臺方式使用。

各種錯誤代碼的符號名稱可在errno模塊中找到。 例如,

import os, errno 
try: 
    os.mkdir('test') 
except OSError, e: 
    if e.errno == errno.EEXIST: 
     # Do something 

您也可以進行反向查找(找出你應該使用什麼樣的代碼)與errno.errorcode。那就是:

>>> errno.errorcode[17] 
'EEXIST' 
+0

也適用於Windows。 – 2008-11-08 01:25:14

相關問題