我能否从异常块中调用更高级别的异常块?

4
假设我有一段代码长这样:
try:
    raise ValueError()
except ValueError as err:
    print("ValueError block")
    raise
except Exception as err:
    print("Exception block")

这将打印:

ValueError block

并抛出一个异常。我希望它只是打印:

ValueError block
Exception block

我能否通过某种方式从 ValueError 块中调用 Exception 块来实现这一点?


3
文档中可以得知:“一个 try 语句可以有多个 except 子句,用于处理不同的异常。__最多只会执行一个处理程序__”。因此你当前的布局不起作用。也许有一种更复杂的方法是可行的。 - Tomerikoo
2
同时下一句话是:"处理程序仅处理在相应的try子句中发生的异常,而不是同一try语句的其他处理程序中发生的异常。" - tobias_k
2个回答

6

你必须遵守异常处理的规则。在这种情况下,可以使用嵌套的try块:

try:
    try:
        raise ValueError()
    except ValueError as err:
        print("ValueError block")
        raise
except Exception as err:
    print("Exception block")

哇,那是最好的回答,也是一种非常简单的方法来获取一些票数。你只是添加了一个try:,并将缩进改了一下。完美。 - JL Peyret
@JLPeyret。是的,如果你计算换行符,try: + 20个空格总共有25个字符。总的来说,这是一天不错的工作。 - Mad Physicist

0

由于ValueErrorException的子类,因此您可以编写一个except块,并使用isinstance进行检查:

try:
    raise ValueError()

except Exception as err:
    if isinstance(err, ValueError):
        print("ValueError block")

    print("Exception block")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接