Python:在满足特定条件时跳过代码块(计算),而不使用;如果;声明

Python:在满足特定条件时跳过代码块(计算),而不使用;如果;声明,python,if-statement,try-catch,Python,If Statement,Try Catch,我有一小段代码,我正试图以更好的方式编写,因为这段代码有一堆“if”语句。这是一些大项目的小代码。问题是:当代码运行时,函数“f”、“g”或/和“k”可能返回无数据或数字数据。只要不返回任何值,就必须跳过其余的计算,因为数学运算(发生在这些函数中)无法完成。我尝试使用TRY/CATCH方法重写代码,但无法使其正常工作。我试图避免使用“如果”语句,并以简洁的方式重写。我感谢你的帮助 确定每个步骤中会引发的错误,然后将这些异常添加到try..except。在这个玩具示例中,它们都是TypeErro

我有一小段代码,我正试图以更好的方式编写,因为这段代码有一堆“if”语句。这是一些大项目的小代码。问题是:当代码运行时,函数“f”、“g”或/和“k”可能返回无数据或数字数据。只要不返回任何值,就必须跳过其余的计算,因为数学运算(发生在这些函数中)无法完成。我尝试使用TRY/CATCH方法重写代码,但无法使其正常工作。我试图避免使用“如果”语句,并以简洁的方式重写。我感谢你的帮助



确定每个步骤中会引发的错误,然后将这些异常添加到
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()