Python:在满足特定条件时跳过代码块(计算),而不使用;如果;声明
我有一小段代码,我正试图以更好的方式编写,因为这段代码有一堆“if”语句。这是一些大项目的小代码。问题是:当代码运行时,函数“f”、“g”或/和“k”可能返回无数据或数字数据。只要不返回任何值,就必须跳过其余的计算,因为数学运算(发生在这些函数中)无法完成。我尝试使用TRY/CATCH方法重写代码,但无法使其正常工作。我试图避免使用“如果”语句,并以简洁的方式重写。我感谢你的帮助Python:在满足特定条件时跳过代码块(计算),而不使用;如果;声明,python,if-statement,try-catch,Python,If Statement,Try Catch,我有一小段代码,我正试图以更好的方式编写,因为这段代码有一堆“if”语句。这是一些大项目的小代码。问题是:当代码运行时,函数“f”、“g”或/和“k”可能返回无数据或数字数据。只要不返回任何值,就必须跳过其余的计算,因为数学运算(发生在这些函数中)无法完成。我尝试使用TRY/CATCH方法重写代码,但无法使其正常工作。我试图避免使用“如果”语句,并以简洁的方式重写。我感谢你的帮助 确定每个步骤中会引发的错误,然后将这些异常添加到try..except。在这个玩具示例中,它们都是TypeErro
确定每个步骤中会引发的错误,然后将这些异常添加到
try..except
。在这个玩具示例中,它们都是TypeError
,但我将添加ValueError
作为演示:
def f(output):
#some code which computes output which be None or numerical
return [output*1,2]
def g(Y):
#some code which computes Y which be None or numerical
return Y*3
def k(output):
#some code which computes output which be None or numerical
return output*4
def foutput():
#some code which computes "value" which be None or numerical
value=2.0
return 1.0*value
output=foutput()
try:
print 'S1'
output, A = f(output)
print 'S2'
a, b, c, Y = 1, 2, 3, k(output)
print 'S3'
A = g(Y)
except (ValueError, TypeError):
Q = A = output = None
else:
Q = 'success' # if none of this fails, you might want a default value for Q
我想我有一个解决办法:
def compute():
if f() is not None: print 'S1'
else: return
if g() is not None: print 'S2'
else: return
if k() is not None: print 'S3'
else: return
compute()
仍然有if
语句,但它们并不像原始代码中那样令人困惑地嵌套
这使用了这样一个事实,即当您从函数返回时,函数的其余部分将被跳过,该函数中的计算将结束。try/except方法有什么不起作用?(我假设你的意思是f、g和k抛出异常而不是返回无异常,并将
[Q、A、output]=[None、None、None]
放在exception块中?)你可以“标准化”函数签名,然后通过简单的中间检查让它们一个接一个地执行,但在您的情况下,简单的try/except应该已经足够了——只需让您的函数引发一个特定的异常,然后让您的代码线性执行,并用try/except块将其包围,以捕获“非标准”返回(例如,如果有任何函数返回None
)
def compute():
if f() is not None: print 'S1'
else: return
if g() is not None: print 'S2'
else: return
if k() is not None: print 'S3'
else: return
compute()