如果没有引发异常,您如何以Python方式告诉程序始终执行某些操作

时间:2019-05-25 11:14:36

标签: python

说我有这样的设置

def add(self, value):

    self._length += 1

    if isinstance(value, str):
        if '\n' in value:
            return self.func_a(value)
        return self.func_b(value)
    return self.func_c(value)

如您所见,很多return语句。每个return语句及其相应的函数调用。

每当所选函数(从func_afunc_bfunc_c中运行)成功运行时,我们都希望_length递增并返回该函数的返回值

但是,如果所选功能无法成功运行,我们希望_length保持不变。

很显然,在_length上面显示的代码中,无论如何,都会递增。

我采用了以下方法

def add(self, value):

    if isinstance(value, str):
        if '\n' in value:
            rt = self.func_a(value)
        else:
           rt = self.func_b(value)
    else:
        rt = self.func_c(value)



    self._length += 1
    return rt

可以用,但是很难看。

是否有更Python化的方法?

2 个答案:

答案 0 :(得分:1)

如果您知道可能会引发哪些异常,则可以执行以下操作:

if isinstance(value, str):
    fn = self.func_a if '\n' in value else self.func_b
else:
    fn = self.func_c


try:
    rt = fn(value)
except Exception as e:
    # We encountered an error
else:
    self._length += 1
finally:
    # We want to always run this code

答案 1 :(得分:0)

“选择功能无法成功运行”是不透明的。如果所选功能引发错误,则整个过程将停止。无论如何,提到的两个代码都是一样的。