def receiver():
print("Ready to receive")
# try:
while True:
n = (yield)
print("Got %s" % n)
# except GeneratorExit:
# print("Receiver done")
r = receiver()
r.next()
r.send(10)
r.close()
私がGeneratorExit
をコメントアウトすると、close()
はトレースバックを生成しません!どうして?しかし、except
がアクティブなので、私はGeneratorExit
にキャッチすることができます。そんなことがあるものか?GeneratorExit、close()はトレースバック/例外を発生させません - どのように?
GeneratorExit
が例外の場合、他のすべての例外と同様に動作し、実行中であることを伝える必要があります。したがって、except
を使用してキャッチする能力があります。しかし、確かにexcept
がなければ、親のPythonインタプリタは他のすべての例外と同様にトレースバックをキャッチする必要があります。どんな魔法がここにいるの?
「while」はそれを暗黙的にキャッチしているので、 – IanAuld
しかし、 'while'が暗黙的にそれをキャッチしている場合、それを囲むtry/exceptにどのように伝播しますか?彼らはどのようにコミュニケーションをとるのですか(IPC)?とにかく、GeneratorExitについて何も言及していない。 –