如果我调用可能引发ValueError或AttributeError的函数(例如foo()),最好的方法是什么?在ValueError的情况下,我想提供另一种方式(例如调用bar()),但是在AttributeError的情况下我想重新提出异常?
显式重新引发特定的(此处为AttributeError)异常?
try:
foo() # may raise ValueError or AttributeError
except ValueError:
bar()
except AttributeError:
raise
或者什么也不做(隐含地重新加注)?
try:
foo() # may raise ValueError or AttributeError
except ValueError:
bar()
更新1:
在编写库时最好的方法是什么(至少一个模块我知道它会被不同的用户使用)?明确地重新提出并记录重新引发或仅记录函数的函数(写出它可能隐含地引发特定异常)?
答案 0 :(得分:0)
你可以在没有重新提升的情况下除了例外。在您的情况下,这不是必要的:
try:
foo() # may raise ValueError or AttributeError
except ValueError:
bar()
如果你需要做一些清理或者需要在提升之前调用一个函数,那么再次提升会很有用:
try:
foo() # may raise ValueError or AttributeError
except ValueError:
bar()
raise