在Python中使用默认消息抛出内置异常
我正在尝试实现一个方法,当某个目录不存在时,它会返回一个错误。
不过,我不想直接使用 raise OSError("目录不存在。")
这种方式,而是想用 OSError 自带的错误信息:OSError: [Errno 2] 没有这样的文件或目录:
。这是因为我在方法调用的开始就抛出异常,而不是在后面(这样的话,Python 会自动给出相同的错误信息,而不需要手动使用 raise
)。
有没有什么建议?(除了手动写 OSError("[Errno 2] 没有这样的文件或目录: ")
)
5 个回答
3
我觉得“异常”就是Python语言里你所说的“错误”的意思。所以在你查找更多信息的时候,可以用这个词。
你可能会觉得阅读一下Python标准库文档中的“6. 内置异常”很有帮助。
OSError
是内置异常之一。它在“内置异常”这一部分有定义,里面提到,“errno
属性是一个来自errno的数字错误代码,而strerror
属性是对应的字符串,就像C语言的perror()
函数打印的那样。你可以查看errno
模块,它包含了底层操作系统定义的错误代码的名称。”
运行这段代码:
raise OSError(42, "my exception string", "no_such_file.dat")
会给我这个结果:
Traceback (most recent call last):
Line 1, in <module>
raise OSError(42, "my exception string", "no_such_file.dat")
OSError: [Errno 42] my exception string: 'no_such_file.dat'
所以,我觉得你的代码可以这样做:
raise OSError(2, "No such file or directory", filename)
12
如果你想获取某个错误代码对应的错误信息,可以使用 os.strerror
这个函数:
>>> os.strerror(2)
'No such file or directory'
另外,你也可以使用 errno
模块,这样可以使用这些错误的标准缩写:
>>> errno.ENOENT
2
>>> os.strerror(errno.ENOENT)
'No such file or directory'
32
import os
try:
open('foo')
except IOError as err:
print(err)
print(err.args)
print(err.filename)
产生
[Errno 2] No such file or directory: 'foo'
(2, 'No such file or directory')
foo
所以,要生成一个类似信息的 OSError
,可以使用
raise OSError(2, 'No such file or directory', 'foo')