On Tue, Jan 7, 2014 at 6:45 AM, Tobias Oberstein <[email protected]> wrote: > Am 07.01.2014 16:55, schrieb Guido van Rossum: > >> There are essentially two alternatives: yield a magic value, or raise >> a magic exception. I don't like yield, because it overloads the other > >> semantic of yield, which are already so severely overloaded. So I >> prefer the magic exception. To raise an exception, you can either use >> a raise statement with a special exception, or a special function that >> raises it. The semantics are the same. I prefer the raise statement, >> because it makes it clear that control flows out of the function here >> (and any code following it is dead). Also, Emacs automatically dedents > > Not sure I fully get it: > > Twisted's `inlineCallback` use regular raise for exceptions, but a special > `returnValue` function for returning > > https://github.com/tavendo/AutobahnPython/blob/master/examples/twisted/websocket/slowsquare/server.py#L36 > > Is that a third alternative? [not a rhetorical question! ;)]
No, that function raises an exception. The disadvantage (in my mind) over just using a raise statement is that the control flow is clear to even the dumbest "static analysis" code (like Emacs' python-mode). >> after a raise statement, which is what you want. Finally, in Python >> 3.3+, return from a generator is actually implemented by raising >> StopIteration with the return value as argument. So it's semantically >> very close. > > > That's very interesting. Need to think more about it .. > > Thanks for this detailed explanation! > > /Tobias > > >> >> On Tue, Jan 7, 2014 at 4:37 AM, Tobias Oberstein >> <[email protected]> wrote: >>>> >>>> * Trollius coroutines must use "raise Return(value)", whereas Tulip >>>> simply >>> >>> >>> >>> Could you explain why that particular construct of "returning by raising" >>> was chosen? >>> >>> It works, but looks strange .. >>> >>> >>> https://github.com/tavendo/AutobahnPython/blob/master/examples/asyncio/websocket/slowsquare/server_py2.py#L34 >>> >>> /Tobias >> >> >> >> > -- --Guido van Rossum (python.org/~guido)
