我正在尝试实现一个方法,每当某个目录不存在时,该方法就会返回错误。
但是,我不想使用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")