如何正确地在try / except块中引发异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确地在try / except块中引发异常相关的知识,希望对你有一定的参考价值。

现在我有一个问题,我想提出一个特定的TypeError,如果有的话。然而,最终发生的事情是解释器看到第一个错误,然后在处理它的过程中它引发另一个错误说“在处理上述异常期间,发生了另一个异常:”

这就是我所拥有的

  def function(dictionary)
    try:
        value = max(dictionary.values())
    except TypeError:
        raise TypeError("some error")

我将以下内容插入shell:

function({1:'a', 2:3})

我怎么处理这个?

答案

如果你想丢弃异常上下文,you can explicitly discard it using from None,例如:

try:
    value = max(dictionary.values())
except TypeError:
    raise TypeError("some error") from None

也就是说,通常最好留下上下文;唯一一次你会看到它是否未被捕获并且发生默认日志记录,或者您尝试记录异常(例如使用logger.exception)。这些额外的信息通常很有用,特别是对于极其广泛的异常类型,例如TypeErrorValueError(你打算捕获特定的已知子类型,并且意外地捕获一个以完全不同的方式引起的)。

要清楚,这仅适用于Python 3,但是,异常上下文链接仅存在于Python 3上;在Python 2上,上下文自动丢失。

另一答案

由于在处理异常时引发异常,异常将被发送回调用方函数。

如果你只是想处理它并打印错误并继续执行其余部分,你可以这样做

except TypeError as t:
    print ("Error", t)

以上是关于如何正确地在try / except块中引发异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在 try except 块中检查某种类型的 OSError?

python异常处理

Python入门 异常处理

如何使用多个catch块处理异常

try catch finally 用法

将类的所有可能的方法调用包装在 try/except 块中