【问题标题】:checking if an object is an Exception class检查对象是否是异常类
【发布时间】:2017-05-01 09:59:40
【问题描述】:

我有一些代码:

try:
    result = func()
except StandardError as e:
    result = e

如何检查result 是否包含异常?

使用 isinstance(result, Exception) 不起作用,因为异常是一个类,而不是一个实例,例如type(ValueError)<type 'type'>

--- 编辑---

那太愚蠢了;虽然上面的代码是我如何使用func() 的正确提炼,但我的测试func() 所做的是return ValueError,而不是raise ValueError。前者返回类,后者返回一个实例。所以问题并不像描述的那样。

【问题讨论】:

  • 嗯...你真的试过isinstance(result, Exception)吗?对我有用,因为eStandardError实例,而不是StandardError 本身的类。
  • 你的代码为什么要这么做?
  • 这对我来说似乎是一个 XY 问题:也许你可以退后一步告诉我们你想要完成什么?
  • 我很想知道你想通过首先将两个不相关的东西之一存储在同一个变量中来实现什么,然后才很难弄清楚这两个东西中的哪一个存储在那里.
  • 我建议您将代码设计得更简单,从而完全避免这个问题:设置result=None 并使用不同的名称,例如err = e 来表示错误。然后你可以很容易地知道你是否有错误或结果:如果err is None 那么没有错误并且结果是好的,否则你有一个错误。

标签: python


【解决方案1】:

虽然我确信这是一个需要重新考虑设计逻辑的XY Problem,但这里是对您直接问题的答案:isinstance 工作正常:

>>> try:
...     int('a')
... except ValueError as e:
...     result = e
...
>>> type(result)
<class 'ValueError'>
>>> isinstance(result, Exception)
True

您的问题是您正在测试ValueError(类),而不是eValueError 的实例)。也许下面的带有bool 的示例(它是int 的子类)会使这一点更清楚:

>>> isinstance(bool, int)
False
>>> isinstance(True, int)
True

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多