【问题标题】:Can I create custom exceptions with another exception (similar to "causedby" in Java)我可以用另一个异常创建自定义异常吗(类似于 Java 中的“causedby”)
【发布时间】:2015-08-19 09:59:07
【问题描述】:

我正在开发一个框架并为其编写扩展。

问题是我只需要为框架提出一个特定的Exception 类。

class FrameworkException(Exception):

我可以提出Exception,它是FrameworkException 的子类,框架将负责记录/报告异常。

现在,在我的插件中,我可以获得各种异常,比如ValueError。我可以以某种方式创建一个包含ValueError 的所有详细信息的FrameworkException 吗?

在Java中,我会做这样的事情,

catch (IOException e) {
    throw new FrameworkException(e);
}

这样,原始异常e的所有细节都将被保留,包括像这样的messagestacktrace

Exception in thread "main" FrameworkException: IOException: Custom Message
    at com.Test.main(Test.java:115)
Caused by: IOException: Custom Message
    at com.Test.main(Test.java:113)

在 Python 中是否有类似的可能?

我试过了,

except Exception as e:
    raise FrameworkException(e)

但它丢失了原始回溯,只有消息。

顺便说一下,我正在使用 Python 2.7

【问题讨论】:

标签: python error-handling exception-handling


【解决方案1】:

在 Python 2 中,您可以使用原始回溯引发异常,因此您应该编写:

raise FrameworkException, FrameworkException(e), sys.exc_info()[2]

或者切换到 Python 3

【讨论】:

  • 太棒了。这似乎有效...快速提问,有没有办法在其中包含原始异常类型?
  • 算了,我是FrameworkException('%s:%s'%(type(e),e)) 打印的也是原来的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多