如何获得Exception OSError的第三个参数?

时间:2016-06-21 08:41:48

标签: python

来自Python document

  

为了向后兼容,如果传递了三个参数,则args属性仅包含前两个构造函数参数的2元组。

那么我们如何处理第三个参数,比如'无效路径'?

try:
    open('invalid path')
except OSError as e:
    error = e
    print(error.args[0],error.args[1])
    print(e)

结果:

2 No such file or directory
[Errno 2] No such file or directory: 'invalid path'

2 个答案:

答案 0 :(得分:1)

在您的示例中,error.args包含(2, 'No such file or directory')

要获取路径,您应该访问error.filename

try:
    open('some/invalid path')
except OSError as e:
    print(e.filename)
    >> 'some/invalid path'

答案 1 :(得分:1)

来自相同的文档:

  

对于涉及文件系统路径的异常(例如open()或   os.unlink()), filename 是传递给函数的文件名。对于   涉及两个文件系统路径的函数(例如os.rename()),   filename2对应于传递给函数的第二个文件名。

所以你只需要error.filename,因为filename是一个可选的arg,只有在某些类型的错误中才会被传递。

要进行全部检查,您可以使用hasattr

if hasattr(error, 'filename'):
    print(error.filename)