-2

イテレータで呼び出されるいくつかの小さいカスタム定義を使用しています。インスタンスでは、定義の 1 つが例外をキャッチし、その定義を終了してスクリプトを実行し続けたいと考えています。主な流れは以下のとおりです。

for TIME in QueuedTimes:
    def1(DATE, TIME)
    def2(DATE, TIME)
    def3(DATE, TIME)

上流の def1() ですべてがうまくいっていると仮定すると、def2() のロジックは次のようになります。

def def2(DATE, TIME):
    <beginstuff>
    while True:
        if exists(fileloaderror):
            print 'found error'
            break
        else:
            print 'pass'
            break
     <end stuff>

これwhile Trueは機能しますが、条件を評価するためだけです。ブレークが最後にジャンプして、キャッチしたい例外によって壊れる残りのすべてにdef2()進み、スキップする必要があります。これを行うためのより信頼できる方法はありますか?def3()<end stuff>

4

2 に答える 2

2

関数を早期に終了する必要がある場合は、次を使用しますreturn

def def2(DATE, TIME):
    # stuff at the start
    while True:
        if exists(fileloaderror):
            print 'found error'
            break
        else:
            print 'pass'
            return
     # stuff at the end

これにより、ループから抜け出し、最後のものスキップします。

于 2013-11-14T21:19:04.467 に答える
0

if ... else ... のいずれかがループを中断または返すため、入力するとすぐにとにかく終了するため、何かを見逃さない限り、 while True は役に立ちません。

しない理由:

def def2(DATE, TIME):
    # stuff at the start
    if not exists(fileloaderror):
        print 'pass'
        return
    print 'found error'
    # stuff at the end
于 2013-11-14T21:49:31.137 に答える