[Python-ideas] except expression
Ron Adam
ron3200 at gmail.com
Wed Feb 19 17:17:41 CET 2014
On 02/19/2014 07:01 AM, Paul Moore wrote:
> I think this is pretty much a tangent by now, but your interpretation
> here isn't the only way of looking at things. Consider the following
> alternative way of looking at it
>
> TRUE-EXPR if COND else FALSE-EXPR
>
> Here, TRUE-EXPR is the "expected" result, qualified by the possibility
> that if COND isn't true then FALSE-EXPR is the result. Looking at the
> if expression in that way, the parallel with the exception expression
> is much clearer:
> EXPR except EXCEPTION return FALLBACK
>
> Here, EXPR is the "expected" result, but if you get EXCEPTION when
> evaluating it then use FALLBACK instead. (Feel free to replace
> "return" with colon or your favourite syntax alternative).
-1 on return. I expect that to exit the function where ever it is in the
current scope.
How about this?
>>> def catch_else(exc, e1, e2):
... try:
... return e1()
... except exc:
... return e2()
...
>>> catch_else(IndexError, lambda: [1, 2, 3][2], lambda: 0)
3
>>> catch_else(IndexError, lambda: [1, 2, 3][4], lambda: 0)
0
The only bad thing about that is having to spell out lambda for each of the
arguments. *1
With a short literal form for a lambda that takes no arguments.
value = catch_else(exc, \expr1, \expr2) #alternatives to '\'?
The function "catch_else" could be a builtin or in functools depending on
how useful it's believed to be.
The shorter lambda expression literal... or expression quote as it's
referred to in other languages would be useful on it's own, and more
preferable than a full lambda for things like this.
[*1] In discussion about how long it's taken for us to get away from
incandescent lights, the expert brought up that there is a difference
between acceptable and preferable.
Cheers,
Ron
More information about the Python-ideas
mailing list