我试图实现一个方法,只要某个目录不存在就会返回错误。
但是,我想使用OSError中的builtint错误消息raise OSError("Directory does not exist.")
,而不是OSError: [Errno 2] No such file or directory:
。这是因为我在方法调用的开头提出异常,而不是稍后(它会从python调用相同的消息,没有任何必要的raise
)。
任何指针? (除了手动执行OSError("[Errno 2] No such file or directory: ")
)
答案 0 :(得分:24)
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')
答案 1 :(得分:10)
要获取给定错误代码的错误消息,您可能需要使用os.strerror
:
>>> os.strerror(2)
'No such file or directory'
此外,您可能希望使用errno
模块对这些错误使用标准缩写:
>>> errno.ENOENT
2
>>> os.strerror(errno.ENOENT)
'No such file or directory'
答案 2 :(得分:2)
我认为“异常”是您称之为“错误”的Python语言术语。因此,在搜索更多信息时请使用此术语。
您可能会发现阅读Python Standard Library documentation, "6. Built-in Exceptions"很有用。
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)
答案 3 :(得分:1)
我认为这里真正的问题是你可能事先做了一堆检查,而不仅仅是尝试。
try:
[CODE]
except Exception:
[HANDLING CODE]
远胜于:
if [SPECIAL CASE]:
[HANDLING CODE]
elif [special case]:
[SPECIAL CASE]
[CODE]
答案 4 :(得分:-1)
try:
# ...
except OSError:
raise OSError("your answer")