【问题标题】:How to specify Exception arguments in python?如何在python中指定异常参数?
【发布时间】:2015-08-26 14:30:53
【问题描述】:

创建异常时如何设置参数?在哪里可以找到每个 Exception 子类可用的参数列表?最佳做法是什么?

例如,如果我知道一个文件不存在,我该如何引发FileNotFoundError(missing_file) 异常?

这显示了FileNotFoundError异常的成员列表:

>>> [a for a in dir(FileNotFoundError) if a>'a']
['args', 'characters_written', 'errno', 'filename', 'filename2', 'strerror', 'winerror', 'with_traceback']

这说明在创建异常时可以设置一些参数:

>>> FileNotFoundError(1,2,3,4,5).filename
3
>>> FileNotFoundError(1,2,3,4,5).filename2
5

这表明这些论点是有意义的:

>>> raise FileNotFoundError(1,2,3,4,5)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    raise FileNotFoundError(1,2,3,4,5)
FileNotFoundError: [WinError 4] 2: 3 -> 5

所以我知道参数在那里,可以设置并且可以使用。但我找不到任何关于它的文档。

raise 文档、FileNotFoundError 文档或 this post 不要谈论异常参数。

【问题讨论】:

  • 不是一个完整的答案,但有一个例外列表here
  • @CasualDemon 这是我问题中的链接之一
  • 啊,错过了,以为它只是代码块。这些成员实际上是在OSError 中定义的(但不在ExceptionBaseException 中),而不仅仅是FileNotFoundError,并且可以像this 回答显示的那样正常设置和访问。
  • @CasualDemon 我的问题中的FileNotFoundError 只是一个例子。我正在寻找一种通用方法来解决所有内置异常的所有参数。它们是内置的,有文档的,但没有参数文档。您引用的帖子上的第三个答案试图解决我的答案,但仅适用于OSError,并且没有解释论点。

标签: python exception-handling raise


【解决方案1】:

查看您为FileNotFoundError 链接的页面,它确实说它是OSError 的子类,具有签名

OSError(errno, strerror[, filename[, winerror[, filename2]]])

可以合理地推断出子类构造函数具有相同的签名。

【讨论】:

  • 查看我对该帖子的第四条评论
  • @stenci:你确实提出了一个很好的问题;我自己查看了文档,我同意在这个问题上它奇怪地稀疏。如果我找到更多信息,我会编辑我的答案。
猜你喜欢
  • 2018-03-12
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2013-01-05
  • 2011-11-02
  • 1970-01-01
相关资源
最近更新 更多