OSError的文件名属性不可用?

时间:2011-01-13 15:15:32

标签: python exception-handling errno

我有以下代码:

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属性解决了这个问题。但是我的要求阻止我不使用此属性。

还有其他办法吗?

1 个答案:

答案 0 :(得分:25)

我没有看到这种异常处理,你将Exception对象的属性传递给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