为了向后兼容,如果传递了三个参数,则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'
答案 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)