在python中处理异常时,我发现自己经常重复代码。基本模式是这样的:
try:
action_here()
except CommonException1:
Action_always_taken_for_CommonException1()
except CommonException2:
Action_always_taken_for_CommonException2()
except Exception:
Default_action_always_taken()
我想做的是如何将这些重复的代码抽象成一个函数或类。我知道一种方法是使用异常对象调用异常处理函数,例如:
^{pr2}$然后在此函数中根据类确定异常。在
def handle_exception(e):
if type(e) == type(CommonException1()):
Action_always_taken_for_CommonException1()
elif type(e) == type(CommonException2()):
Action_always_taken_for_CommonException2())
else:
Default_action_always_taken()
然而,这让人感觉笨拙和不雅观。所以我的问题是,除了处理重复的异常处理,还有什么其他的选择?在
如果您不喜欢重复的
if
/elseif
块,可以将句柄放在dict中,并按类型键入:你可以用它来运行:
^{pr2}$另外:如果您发现自己经常编写这些try块,那么您可以编写自己的上下文管理器(参见here)。在
action_here()
一侧,您的代码将如下所示:在本例中,
handle_exception
代码实质上是上下文管理器的__exit__
方法(在with块期间引发的任何异常都将被传递)。在这种情况是上下文管理器和with语句的主要用例之一:
虽然使用上下文管理器的解决方案(如其他人所建议的那样)是最优雅的,而且我也会推荐您,但我想指出,通过重新引发异常,您的
handle_exception
函数可以编写得更优雅:相关问题 更多 >
编程相关推荐