gpt4 book ai didi

python - 使用异常链的原因是什么

转载 作者:行者123 更新时间:2023-12-03 08:39:32 26 4
gpt4 key购买 nike

最近我正在阅读有关异常链接的内容,我不确定何时应该使用此语法以及出于什么原因。

我已经习惯了这样的模式:

try:
my_function()
exception MyError:
my_logger.exception("Error occured")
raise MyProcessError("Process failed")

我注意到,如果我在此处使用异常链接,则回溯中的一个文本将被更改,并且 MyProcessError 将具有包含来自 MyError 的消息的新属性。

try:
my_function()
exception MyError as err:
my_logger.exception("Error occured")
raise MyProcessError("Process failed") from err

跟踪日志中提及的更改是将“在处理上述异常期间,发生了另一个异常”替换为“上述异常是以下异常的直接原因”。

那么使用这种语法的原因是什么?我什么时候应该将其包含到我的代码中?欢迎举例:-)

最佳答案

在异常处理程序中,如果您显式引发异常,您将需要使用 from errfrom None (具体取决于抑制是否更有意义)原始回溯与否)。

如果没有 from,您收到的消息:“在处理上述异常期间,发生了另一个异常”,表明“出现了问题,然后在尝试从中恢复时,发生了其他情况(可能不相关)出了问题。例如,当您输入错误(my_logger.expeption("发生错误"))或您尝试将某些内容保存到无法保存的文件时,就会出现这种情况。打开。

使用from,它表明只有一件事出了问题,即您没有处理自己,但您有一些对程序员或用户有用的更多信息。例如,您可以捕获 KeyError 并引发不同的异常,并显示消息“尝试编辑不存在的小部件”或其他内容。

因此,raise SomeException("some description") from err是一种能够解释如果代码引发err出错时会发生什么的方法code> 无法做到这一点(因为它来自标准库,或者因为它缺乏调用它的必要上下文),而不让用户知道两个单独的事情接连发生错误。

关于python - 使用异常链的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63011750/

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