由于异常对于惯用Python来说是如此重要,如果表达式求值为True 或,表达式的评估会引发异常,是否有一种干净的方法来执行特定的代码块?通过干净,我的意思是易于阅读,Pythonic,而不是重复代码块?
例如,而不是:
try:
if some_function(data) is None:
report_error('Something happened')
except SomeException:
report_error('Something happened') # repeated code
是否可以干净地重写,以便report_error()
不会被写两次?
(类似问题:How can I execute same code for a condition in try block without repeating code in except clause但这是针对特定情况,可以通过if语句中的简单测试来避免异常。)
答案 0 :(得分:0)
是的,这可以相对干净地完成,不过它是否可以被视为好的风格是一个悬而未决的问题。
def test(expression, exception_list, on_exception):
try:
return expression()
except exception_list:
return on_exception
if test(lambda: some_function(data), SomeException, None) is None:
report_error('Something happened')
这来自被拒绝的PEP 463中的想法。
lambda to the Rescue提出了同样的想法。