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)。然后我在异常代码行收到以下错误:

ValueError: need more than 2 values to unpack

它通过不使用filename属性来解决。但是,我的要求阻止我不使用此属性。

还有其他方法吗?

4

1 回答 1

31

我还没有看到这种将异常对象的属性传递给 as 子句的异常处理。

通常,您处理except ExceptionObject as e和处理属性就像通常处理对象的属性一样。

OSError 包含 errno 属性是来自 errno 的数字错误代码,strerror 属性是对应的字符串,对于涉及文件系统路径的异常(例如 chdir() 或 unlink()),异常实例将包含第三个属性, 文件名,这是传递给函数的文件名。

import os
try:
    os.chdir('somenonexistingdir')
except OSError as e:
    print e.errno
    print e.filename
    print e.strerror
于 2011-01-13T16:08:17.003 回答