在Python中使用默认消息抛出内置异常

26 投票
5 回答
19654 浏览
提问于 2025-04-17 10:55

我正在尝试实现一个方法,当某个目录不存在时,它会返回一个错误。

不过,我不想直接使用 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')

撰写回答