gpt4 book ai didi

Python 等同于 Java Exception with cause

转载 作者:行者123 更新时间:2023-12-03 20:25:37 25 4
gpt4 key购买 nike

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

在 Java 中,您可以创建具有原因的异常实例,例如以下代码

try {
throw new IOException();
} catch (IOException e) {
throw new RuntimeException("An exception occurred while trying to execute", 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

另一个 Python 特性是 raise from,它提供了一个稍微不同的回溯:

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

进一步阅读:

关于Python 等同于 Java Exception with cause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59732460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com