在python中使用默认消息引发内置异常



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

但是,我不想使用raise OSError("Directory does not exist."),而是想使用OSError中的内置错误消息:OSError: [Errno 2] No such file or directory:。这是因为我在方法调用开始时引发异常,而不是稍后(这将从python调用相同的消息,而不需要任何必要的raise)。

有指针吗?(除了手动执行OSError("[Errno 2] No such file or directory: ")

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')

要获得给定错误代码的错误消息,您可能需要使用os.strerror:

>>> os.strerror(2)
'No such file or directory'

此外,您可能希望使用errno模块来使用这些错误的标准缩写:

>>> errno.ENOENT
2
>>> os.strerror(errno.ENOENT)
'No such file or directory'

我认为"exception"是Python语言中您所称的"error"的术语。因此,在搜索更多信息时请使用此术语。

您可能会发现阅读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)

我认为这里真正的问题是,您可能事先做了一系列检查,而不是尝试。

try:
    [CODE]
except Exception:
    [HANDLING CODE]

比好得多

if [SPECIAL CASE]:
    [HANDLING CODE]
elif [special case]:
    [SPECIAL CASE]
[CODE]
try:
    # ...
except OSError:
    raise OSError("your answer")

最新更新