OSError的filename属性不可用?

7 投票
1 回答
15033 浏览
提问于 2025-04-16 09:54

我有以下代码:

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

撰写回答