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

时间:2018-03-01 02:54:38

标签: python python-3.x exception-handling

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

这就是我所拥有的

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

我将以下内容插入shell:

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

我该如何处理?

2 个答案:

答案 0 :(得分:1)

如果要放弃异常上下文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上,上下文会自动丢失。

答案 1 :(得分:-1)

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

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

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