Java异常的Python等价物
Python中有没有一种方法可以引发另一个错误作为其原因的错误 在Java中,您可以创建一个异常实例,其原因如下所示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
试试看{
抛出新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:第二个异常
进一步阅读:
from
是隐式的raise
。from
子句有助于链接到其他异常或抑制异常链接(使用from None
)。因此基本上raisefrom
在回溯中澄清了第一个异常是预期的可能性,第二个错误说明(或至少应该说明)用户做错了什么?@masklin第一个回溯声明“在处理上述异常期间,发生了另一个异常”,而第二个声明“上述异常是以下异常的直接原因”。这清楚地表明,在第二种情况下,第二个异常是由于第一个异常而故意引发的,而在第一种情况下,它可能是意外的异常。