捕捉异常后立刻重新抛出有意义吗?

3 投票
8 回答
640 浏览
提问于 2025-04-16 05:30

可能的重复问题:
仅仅用raise抛出的异常有什么用吗?

在没有其他代码的情况下,重新抛出一个异常有什么价值吗?

try:
  #code
except Exception:
  raise

我最近在查看一些代码时,发现有几个异常处理块,里面除了一个重新抛出的异常之外没有其他任何内容。我觉得这可能是个错误或者不太明智的决定,我这样想对吗?

8 个回答

2

这个例子是基于这个问题。如果在try块里有其他的except,那么它可以用来筛选异常,但单独使用的话就没有意义了。

class FruitException(Exception): pass

try:
    raise FruitException
except FruitException:
    print "we got a bad fruit"
    raise
except Exception:
    print "not fruit related, irrelevant."
2

我想不出其他有用的办法,只能把它当作一个占位符,等以后再插入用来捕捉有用的异常。

这样做可以避免在后面想要加入“try .. except ..”块时重新调整代码的缩进。

2

我之前在一些糟糕的VB.NET项目中见过类似的代码。要么是想要捕捉并记录错误,但最后却没把记录完成;要么是听说“你必须捕捉错误”,于是就实现了这个功能,但最后又有人决定还是把错误重新抛出。

上面的代码没有任何好处。

撰写回答