2016-12-17 4 views
1

だが、私はこのようなコードがあるとしましょう:内部関数から最も外側の関数を終了する方法はありますか?

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の終わりにリターンを入れようとしましたが、それはちょうどexperiment_2である次の機能に向かうようです。

+0

どこでネストされた関数を呼び出していますか?つまり、2つのネストされた関数を定義するだけです。 –

+0

これは[XY問題](http://xyproblem.info/)のように見えますが、何をしようとしていますか? – Kroltan

+1

あなたは例外を探しているかもしれませんが、本当に十分な文脈はありません。 –

答えて

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() 

この特定の例は一見醜いですが、あなたはその考えを得るべきです。

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

-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() 
関連する問題