当函数A调用函数B调用函数C.以及如何处理多个Nones

时间:2014-07-26 17:52:09

标签: python

以下是一个例子:

def getNumber3(arg):
    if arg!=7:
        print 'arg!=7'
        return
    return 7

def getNumber5(arg):
    if arg!=5:
        print 'getNumber5(): arg!=5'
        return

    number7=getNumber3(7)
    if not number7:
        print 'getNumber5(): not number7'
        return
    return '%s-%s'%(arg,number7)

def getNumber():
    number5=getNumber5(5)
    if number5:
        return 'The number is: %s'%number5

print getNumber()

函数getNumber5()期待来自getNumber3()的返回值将返回None并打印"错误"如果传入的参数号不是7,则显示消息。

功能getNumber5()如果收到None(来自函数getNumber3)会投诉并返回“无”#39}太

因此,两个函数:getNumber5()getNumber3()都在抱怨并返回None

问题:如何安排此功能工作流程,以便第一个功能getNumber(启动它全部)只要' getNumber3()'函数返回无绕过getNumber5()'. So getNumber5()'函数不必抱怨并返回自己的无。

1 个答案:

答案 0 :(得分:2)

您可以使用异常处理立即跳回getNumber()

class NoNumberException(Exception):
    pass

def getNumber3(arg):
    if arg!=7:
        print 'arg!=7'
        raise NoNumberException
    return 7

def getNumber5(arg):
    if arg!=5:
        print 'getNumber5(): arg!=5'
        return

    number7=getNumber3(7)
    if not number7:
        print 'getNumber5(): not number7'
        return
    return '%s-%s'%(arg,number7)

def getNumber():
    try:
        number5=getNumber5(5)
        if number5:
            return 'The number is: %s'%number5
    except NoNumberException:
        return "None value encountered in getNumber3()"

print getNumber()