2011-01-13 32 views
5

我有以下代碼:OSError的文件名屬性不可用?

except(OSError) as (errno, strerror, filename): 
print "OSError [%d]: %s at %s" % (errno, strerror, filename) 

它運行很好,除非它符合OSERROR NUM。 123(The file name, directory name, or volume label syntax is incorrect)。然後我得到以下錯誤在不同的代碼行:

ValueError: need more than 2 values to unpack 

它是通過不使用filename屬性解決。但是我的要求阻止我不使用此屬性。

還有別的辦法嗎?

回答

24

我還沒有看到這種異常處理,您將異常對象的屬性傳遞給as子句。

通常您會處理except ExceptionObject as e並處理屬性,因爲通常會處理對象的屬性。

OSError包含errno屬性是來自errno的數字錯誤代碼,並且strerror屬性是相應的字符串,對於涉及文件系統路徑(例如chdir()或unlink())的異常,異常實例將包含第三個屬性filename,它是傳遞給函數的文件名。

import os 
try: 
    os.chdir('somenonexistingdir') 
except OSError as e: 
    print e.errno 
    print e.filename 
    print e.strerror 
+9

「我還沒有看到這種異常處理」=最好的方式說你做錯了。 – marr75 2011-01-13 16:29:26