[Python-3000] Exception Expressions
brett at python.org
Thu Aug 31 20:20:20 CEST 2006
On 8/31/06, Calvin Spealman <ironfroggy at gmail.com> wrote:
> I thought I felt in the mood for some abuse today, so I'm proposing
> something sure to give me plenty of crap, but maybe someone will enjoy
> the idea, anyway.
Never hurts too much to try, huh? =) Plus it gives me a break from my
This is a step beyond the recently added conditional
> expressions. I actually made this up as a joke, explaining at which
> point we would have gone too far with branching logic in an
> expression. After making the joke, I was sad to realize I didn't mind
> the idea and thought I'd see if anyone else doesn't mind it either.
> expr1 except expr2 if exc_type
> For example, given a list, letters, of ['a', 'b', 'c'], we would be
> able to do the following:
> print letters except "N/A" if IndexError
So this feels like the Perl idiom of using die: ``open(file) or die`` (or
something like that; I have never been a Perl guy so I could be off).
This would translate to something along the lines of:
> _tmp = letters
> except IndexError:
> _tmp = "N/A"
> print _tmp
> Obviously, the except in an expression has to take precedence over if
> expressions, otherwise it would evaluate '"N/A" if IndexError" first.
> The syntax can be extended in some ways, to allow for handling
> multiple exception types for one result or different results for
> different exception types:
> foo() except "Bar or Baz!?" if BarError, BazError
> foo() except "Bar!" if BarError, "Baz!" if BazError
> Other example use cases:
> # Fallback on an alternative path
> open(filename) except open(filename2) if IOError
> # Handle divide-by-zero
> while expr != "quit":
> print eval(expr) except "Can not divide by zero!" if
> expr = raw_input()
> # Use a cache when an external resource timesout
> db.get(key) except cache.get(key) if TimeoutError
> Only very basic exception handling would be useful with this syntax,
> so nothing would ever get out of hand, unless someone wasn't caring
> about their code looking good and keeping good line lengths, so their
> code probably wouldn't look great to begin with.
The problem I have with this whole proposal is that catching exceptions
should be very obvious in the source code. This proposal does not help with
that ideal. So I am -1 on the whole idea.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-3000