【发布时间】:2016-12-06 09:35:39
【问题描述】:
如果我调用可能引发 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:
在编写库的情况下,有什么更好的方法(至少我知道一个模块会被不同的用户使用)?显式地重新引发并记录重新引发的函数或仅记录函数(写它可能隐式引发特定异常)?
【问题讨论】:
-
如果在 AttributeError 上隐式引发,您将获得更好的堆栈跟踪
-
@VasiliSyrakis 不是真的,使用
raise会完全一样 -
2.很好