如何正确地在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
)。这些额外的信息通常很有用,特别是对于极其广泛的异常类型,例如TypeError
和ValueError
(你打算捕获特定的已知子类型,并且意外地捕获一个以完全不同的方式引起的)。
要清楚,这仅适用于Python 3,但是,异常上下文链接仅存在于Python 3上;在Python 2上,上下文自动丢失。
另一答案
由于在处理异常时引发异常,异常将被发送回调用方函数。
如果你只是想处理它并打印错误并继续执行其余部分,你可以这样做
except TypeError as t:
print ("Error", t)
以上是关于如何正确地在try / except块中引发异常的主要内容,如果未能解决你的问题,请参考以下文章