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

时间:2012-01-23 20:24:20

标签: python exception

我试图实现一个方法,只要某个目录不存在就会返回错误。

但是,我想使用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: ")

5 个答案:

答案 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")