捕捉异常后立刻重新抛出有意义吗?
可能的重复问题:
仅仅用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项目中见过类似的代码。要么是想要捕捉并记录错误,但最后却没把记录完成;要么是听说“你必须捕捉错误”,于是就实现了这个功能,但最后又有人决定还是把错误重新抛出。
上面的代码没有任何好处。