0

StopIteration関連のないコードから例外がスローされないようにする方法はありますか (手動でキャッチする必要はありません)。

例:イテレータをループして、このイテレータが終了したら先にloop_all進みたいとします。または他のコードが を発生させmyiterない限り、これは機能します。some_dangerous_methodmyiterStopIteration

def loop_all():
    myiter = myiter()
    try:
        while True:
            next(myiter) # <- I want exactly the StopIteration from this next method
    except StopIteration:
        pass

def myiter():
    some_dangerous_method() # what if this also raises a StopIteration?
    for i in some_other_iter():
        # here may be more code
        yield

StopIterationコードが反応する対象を明確にする方法はありますか?

4

2 に答える 2

3

呼び出している関数がnext(iter)を呼び出していて、を処理していない場合StopIteration、その関数にはバグがあります。修理する。

于 2012-06-03T00:02:46.633 に答える
1

おそらく私は何かが足りないのですが、なぜこれだけではないのですか?

def myiter():
    try:
        some_dangerous_method()
    except StopIteration:
        pass # or raise a different exception
    for i in some_other_iter():
        # here may be more code
        yield
于 2012-06-03T16:41:21.660 に答える