Java异常的Python等价物

Java异常的Python等价物,python,exception,Python,Exception,Python中有没有一种方法可以引发另一个错误作为其原因的错误 在Java中,您可以创建一个异常实例,其原因如下所示 试试看{ 抛出新IOException(); }捕获(IOE异常){ 抛出新的RuntimeException(“尝试执行时发生异常”,e); } 导致以下错误消息: Exception in thread "main" java.lang.RuntimeException: An exception occurred while trying to execute a

Python中有没有一种方法可以引发另一个错误作为其原因的错误

在Java中,您可以创建一个异常实例,其原因如下所示

试试看{
抛出新IOException();
}捕获(IOE异常){
抛出新的RuntimeException(“尝试执行时发生异常”,e);
}
导致以下错误消息:

Exception in thread "main" java.lang.RuntimeException: An exception occurred while trying to execute
    at thing.Main.main(Main.java:11)
Caused by: java.io.IOException
    at thing.Main.main(Main.java:9)
请注意,第一个异常(在堆栈跟踪中)是由第二个异常“引起”的

在我看来,这是一个很好的方式,可以向API用户显示在调用过程中发生了更高级别的错误,开发人员可以通过查看较低级别的异常来调试它,这是更高级别错误的“原因”(在本例中,RuntimeException是由IOException引起的)


通过我所做的搜索,我无法找到任何关于在Python中出现错误作为另一个错误原因的信息。这可以用Python实现吗?怎么用?如果不是,那么什么是Pythonic的等价物呢?

在Python中,它是由一个非常相似的结构实现的:

try:
    raise ValueError
except ValueError:
    raise ValueError('second exception')
这将生成以下回溯:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    raise ValueError
ValueError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    raise ValueError('second exception')
ValueError: second exception
try:
    raise ValueError
except ValueError as e:
    raise ValueError('second exception') from e
回溯:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    raise ValueError
ValueError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    raise ValueError('second exception') from e
ValueError: second exception
回溯(最近一次呼叫最后一次):
文件“main.py”,第2行,在
升值误差
数值误差
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“main.py”,第4行,在
从e引发ValueError(“第二个异常”)
ValueError:第二个异常
进一步阅读:


“Python的另一个特性是raise,它提供了一个稍微不同的回溯:“唯一的区别是,它在代码不同的地方打印不同的代码
from
是隐式的
raise
from
子句有助于链接到其他异常或抑制异常链接(使用
from None
)。因此基本上
raisefrom
在回溯中澄清了第一个异常是预期的可能性,第二个错误说明(或至少应该说明)用户做错了什么?@masklin第一个回溯声明“在处理上述异常期间,发生了另一个异常”,而第二个声明“上述异常是以下异常的直接原因”。这清楚地表明,在第二种情况下,第二个异常是由于第一个异常而故意引发的,而在第一种情况下,它可能是意外的异常。