0

最初に言っておきますが、このトピックが適切かどうかはわかりませんが、問題を 1 行で説明するのは非常に困難です。

その後、イベント全体について説明します。

私はpythonでプログラムを書いています。そこでは、いくつかのメソッドとこれらのメソッドの1つ(method1)を持つクラスがあり、クラスの別のメソッド(method2)を構成データのリストのループで実行し、method2でいくつかを呼び出しますクラスの他のメソッド。コードは次のようなものです。

class myClass():
    def method1(self):
        for member in some_list:
            method2(member)

    def method2(self, member):
        do something with the member
        self.method3()
        self.method4()
        self.method5()
        ...

method2 では、メソッド内から method2 を停止したい状況がいくつかあります。たとえば、method3またはmethod4にいるときに、method2を停止したい場合があります。

assertプログラム全体を停止し、この特別なメンバーをスキップして method1 のループを続行したいだけなので、使用したくありません。言い換えれば、リストの一部のメンバーは、method2 を続行できない状況を作り、そこで停止して、リストの次のメンバーのために method2 のプロセスを開始する必要があります。

True 値と False 値を返し、それをチェックして、returnキーワードで停止するかどうかを判断できるようになりましたが、このアプローチは使用したくありません。私が実際に望んでいるのは、そのような状況で呼び出すメソッドを作成することです。メソッドは method2 の実行を停止し、method1 の最初のループに戻って別のメンバーを選択します。例を書くことができます:

def method3(self):
    do something 
    if some_special_situation:
        method_stop()
    else:
        continue execution

def method_stop():
    do something to stop the method which is calling it
    and the method that the first method is called there
    I mean if method2 is calling method3 and method3 is calling method_stop
    method_stop should stop both method2 and method3

この質問がどれほど明確かはわかりませんが、説明が必要な場合は私に聞いてください。どんな助けにも感謝します。

4

3 に答える 3

0
method1():
    method_names = ["method1","method2",...]
    for name in method_names:
        if !getattr(self, name)():
            return False
    #more code

method2():
    #epic code goes here
    if bad_stuff_happens:
        return False
    #epic code goes here
    return True
于 2013-10-03T07:59:48.350 に答える
0

例外を投げて、それをキャッチしてmethod1ください。どのBTWが何をしているのかassert、それはスローAssertionErrorされ、それをキャッチできます。インタープリターまで到達すると、プログラムが終了します。

于 2013-10-03T08:00:35.980 に答える