说我有这样的设置
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_a
,func_b
和func_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化的方法?
答案 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)
“选择功能无法成功运行”是不透明的。如果所选功能引发错误,则整个过程将停止。无论如何,提到的两个代码都是一样的。