**************************** Exceptions can be raised inside a coroutine using the throw(
Exceptions raised in this manner will originate at the currently executing yield state-ment in the coroutine.A coroutine can elect to catch exceptions and handle them as appropriate. It is not safe to use throw() as an asynchronous signal to a coroutine—it should never be invoked from a separate execution thread or in a signal handler. **************************** What does Beazley mean by this: 'will originate at the currently executing yield state-ment in the coroutine' If he's throw'ing an exception surely it originates at the throw: def mycoroutine(): while len(n) > 2: n = (yield) throw('RuntimeError' "die!") ---------------------- Also: 'not safe to use throw() as an asynchronous signal to a coroutine— it should never be invoked from a separate execution thread or in a signal handler.' You can use throw within a coroutine to raise an exception. How would you use it as an async-sig to a coroutine.. eg: you have two threads 1. coroutine does except FooException: 2. throw(FooException, 'message') so moment 'throw' runs and an exception is raised.. it'll propagate within thread-2 to its parent etc - how is thread-1 affected? -- https://mail.python.org/mailman/listinfo/python-list