如果条件或异常,则执行代码块

时间:2017-09-19 15:46:04

标签: python-3.x exception-handling

由于异常对于惯用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语句中的简单测试来避免异常。)

1 个答案:

答案 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提出了同样的想法。