从内部函数退出最外层函数的方法是什么?

时间:2016-12-17 15:06:13

标签: python python-3.x

假设我的代码看起来像这样:

def lab():
    letter = prompt() 
    def experiment_1():
        if letter == 1:
            print("check")
            #Would there be a way to quit the lab function right here?
    def experiment_2():
        if letter == 1:
            print("check2")

    experiment_1()
    experiment_2()
lab()

打印“检查”后,我是否可以立即退出实验室功能?我尝试在experiment_1的末尾添加return,但这似乎正好适用于experiment_2的下一个函数。

3 个答案:

答案 0 :(得分:2)

最明显的方法是提出异常。它可以让你从任何深度出去。定义一个自定义异常并在某个外层捕获它。例如:

class MyError(Exception):
    pass

def _lab():
    letter = prompt() 

    def experiment_1():
        if letter == 1:
            print("check")
            raise MyError

    def experiment_2():
        if letter == 1:
            print("check2")

    experiment_1()
    experiment_2()

def lab():
    try:
        return _lab()
    except MyError:
        return

lab()

这个特殊的例子有点难看,但你应该明白这个想法。

答案 1 :(得分:0)

如评论部分所述,您可以将标志传递给外部函数

def lab():
    letter = prompt()

    def experiment_1():
        if letter == 1:
            print("check")
            return True
        return False

    def experiment_2():
        if letter == 1:
            print("check2")

    if experiment_1():
        return

    experiment_2()

lab()

但是你应该改进你的问题,因为听起来你正试图解决另一个问题。请参阅:http://mywiki.wooledge.org/XyProblem

答案 2 :(得分:-1)

您可以将return语句放在要运行的位置。在你可以返回任何其他瘦身return var1 var2

def lab():
    letter = prompt() 
    def experiment_1():
        if letter == 1:
            print("check")
            # Would there be a way to quit the lab function right here?
            # you have to put return just here
            return
    def experiment_2():
        if letter == 1:
            print("check2")

    experiment_1()
    experiment_2()
lab()