1

によってスローされた例外をキャッチする必要があるnext(it)ため、この場合は通常のforループを使用できません。だから私はこのコードを書いた:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except Exception as e:
        print(e) # log and ignore
    except StopIteration:
        break
print('finished')

これは機能しません。数が使い果たされた後、無限ループが発生します。私は何を間違っていますか?

4

1 に答える 1

2

は、別のスロー可能なクラスではなく、StopIteration実際には のサブクラスであることがわかります。Exceptionそのため、StopIterationハンドラーは呼び出されませんでしStopIterationExceptionStopIterationハンドラーを上に置くだけでした:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except StopIteration:
        break
    except Exception as e:
        print(e) # log and ignore
print('finished')
于 2012-12-13T13:48:43.937 に答える