OSError的文件名属性不可用?

7
我有以下代码:
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),否则它运行得很好。然后在except代码行处会得到以下错误:

ValueError: need more than 2 values to unpack

“不使用filename属性可以解决问题。然而,我的要求不允许我不使用这个属性。”
“还有其他方法吗?”
1个回答

32

我从未见过这种将异常对象的属性传递到 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

14
我还没有见过这种异常处理方式 = 最委婉地说你做错了。 - marr75

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接