OSError的filename属性不可用?
我有以下代码:
except(OSError) as (errno, strerror, filename):
print "OSError [%d]: %s at %s" % (errno, strerror, filename)
这段代码运行得很好,直到遇到OSError编号123(文件名、目录名或卷标语法不正确
)。这时我在处理异常的代码行会出现以下错误:
ValueError: need more than 2 values to unpack
通过不使用filename
这个属性可以解决这个问题。不过我的需求不允许我不使用这个属性。
有没有其他解决办法呢?
1 个回答
32
我没见过这种处理异常的方式,你把异常对象的属性传给了 as 子句。
通常我们处理异常是用 except ExceptionObject as e
,然后像处理普通对象的属性一样去处理这些属性。
OSError 这个异常有一个叫 errno 的属性,它是一个数字错误代码,还有一个叫 strerror 的属性,它是对应的错误信息。如果异常是和文件系统路径有关的(比如 chdir() 或 unlink()),那么这个异常实例会有第三个属性,叫 filename,它就是传给函数的文件名。
import os
try:
os.chdir('somenonexistingdir')
except OSError as e:
print e.errno
print e.filename
print e.strerror