Aahz wrote:
This is pretty much the canonical example showing why control-flow exceptions are a Good Thing. They're a *structured* goto.
I'm wondering whether what we really want is something that actually *is* a structured goto. Or something like a very light-weight exception that doesn't carry all the expensive baggage of tracebacks, isinstance() tests for matching, etc. Ruby seems to have something like this. It has a try/rescue/raise mechanism that works like Python's try/except/raise, but it also has try/catch/throw as a less expensive alternative for flow control. A Python version might look like Foo = object() # a token to throw try: do_something() catch Foo: someone_threw_a_foo() def do_something(): throw Foo Nothing is instantiated -- the token value itself is thrown -- and the catch clauses compare it by identity with candidate values. There is also no traceback carried by the thrown token. (Although if something is thrown but not caught, an exception should be raised at the point of the throw with an appropriate traceback -- implementation of that is left as an exercise for the reader.) -- Greg _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com