Python 我可以用另一个异常创建自定义异常(类似于Java中的“causedby”)

Python 我可以用另一个异常创建自定义异常(类似于Java中的“causedby”),python,error-handling,exception-handling,Python,Error Handling,Exception Handling,我正在开发一个框架,并为其编写扩展 问题是,我只需要为框架提出一类特殊的异常 class FrameworkException(Exception): 我可以提出一个Exception,它是FrameworkException的子类,框架将负责记录/报告异常 现在,在我的插件中,我可以得到各种异常,比如ValueError。我是否可以创建一个包含ValueError所有详细信息的FrameworkException 在Java中,我会这样做 catch (IOException e) {

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

问题是,我只需要为框架提出一类特殊的异常

class FrameworkException(Exception):
我可以提出一个
Exception
,它是
FrameworkException
的子类,框架将负责记录/报告异常

现在,在我的插件中,我可以得到各种异常,比如
ValueError
。我是否可以创建一个包含
ValueError
所有详细信息的
FrameworkException

在Java中,我会这样做

catch (IOException e) {
    throw new FrameworkException(e);
}
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)
这样,原始异常
e
的所有细节将被保留,包括消息和stacktrace,如下所示

catch (IOException e) {
    throw new FrameworkException(e);
}
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 2中,您可以使用原始回溯引发异常,因此您应该编写:

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

或者在使用Python 2时切换到Python 3

;Python 3有它自己的特点。@Evert,ya。。但是他们在制作3时忘记了向后兼容性,所以我无法轻松切换…(太好了。这似乎很有效…快速问题,有没有办法将原始异常类型也包括在其中?算了吧,我做了
FrameworkException(“%s:%s%”(type(e),e))
,并且打印的也是原始类型。