| Store | Cart

[Python-Dev] (try-except) conditional expression similar to (if-else) conditional (PEP 308)

From: MRAB <pyt...@mrabarnett.plus.com>
Thu, 06 Aug 2009 12:39:58 +0100
Nick Coghlan wrote:
> P.J. Eby wrote:>> At 05:59 PM 8/5/2009 -0700, Raymond Hettinger wrote:>>> [Jeffrey E. McAninch, PhD]>>>> I very often want something like a try-except conditional expression>>>> similar>>>> to the if-else conditional.>>>>>>>> An example of the proposed syntax might be:>>>>    x = float(string) except float('nan')>>>> or possibly>>>>    x = float(string) except ValueError float('nan')>>> +1 I've long wanted something like this.>>> One possible spelling is:>>>>>>   x = float(string) except ValueError else float('nan')>> I think 'as' would be better than 'else', since 'else' has a different>> meaning in try/except statements, e.g.:>>>>    x = float(string) except ValueError, TypeError as float('nan')>>>> Of course, this is a different meaning of 'as', too, but it's not "as">> contradictory, IMO...  ;-)> > (We're probably well into python-ideas territory at this point, but I'll> keep things where the thread started for now)> > The basic idea appears sound to me as well. I suspect finding an> acceptable syntax is going to be the sticking point.> > Breaking the problem down, we have three things we want to separate:> > 1. The expression that may raise the exception> 2. The expression defining the exceptions to be caught> 3. The expression to be used if the exception actually is caught> >>From there it is possible to come up with all sorts of variants.> > Option 1:> > Change the relative order of the clauses by putting the exception> definition last:> >   x = float(string) except float('nan') if ValueError>   op(float(string) except float('nan') if ValueError)> > I actually like this one (that's why I listed it first). It gets the> clauses out of order relative to the statement, but the meaning still> seems pretty obvious to me.> 
A further extension (if we need it):

     result = foo(arg) except float('inf') if ZeroDivisionError else 

The 'else' part handles any other exceptions (not necessarily a good idea!).


     result = foo(arg) except float('inf') if ZeroDivisionError else 
float('nan') if ValueError

Handles a number of different exceptions.

> Option 2:> > Follow the lamba model and allow a colon inside this form of expression:> >   x = float(string) except ValueError: float('nan')>   op(float(string) except ValueError: float('nan'))> > This has the virtue of closely matching the statement syntax, but> embedding colons inside expressions is somewhat ugly. Yes, lambda> already does it, but lambda can hardly be put forward as a paragon of> beauty.> 
A colon is also used in a dict literal.

> Option 3a/3b:> > Raymond's except-else suggestion:> >   x = float(string) except ValueError else float('nan')>   op(float(string) except ValueError else float('nan'))> 

Recent Messages in this Thread
Jeff McAninch Aug 05, 2009 10:22 pm
Raymond Hettinger Aug 06, 2009 12:59 am
P.J. Eby Aug 06, 2009 01:20 am
Nick Coghlan Aug 06, 2009 10:47 am
Dj Gilcrease Aug 06, 2009 11:18 am
MRAB Aug 06, 2009 11:39 am
Jeff McAninch Aug 06, 2009 02:36 pm
Dino Viehland Aug 06, 2009 09:55 pm
MRAB Aug 06, 2009 11:33 pm
Dino Viehland Aug 07, 2009 12:01 am
MRAB Aug 07, 2009 12:22 am
Jeff McAninch Aug 07, 2009 10:14 am
MRAB Aug 07, 2009 11:03 am
Dj Gilcrease Aug 10, 2009 02:29 pm
Jeff McAninch Aug 06, 2009 02:11 am
Antoine Pitrou Aug 06, 2009 11:32 am
Xavier Morel Aug 06, 2009 10:25 am
Russell E. Owen Aug 06, 2009 07:55 pm
MRAB Aug 07, 2009 12:36 am
Kristján Valur Jónsson Aug 07, 2009 10:22 am
ilya Aug 07, 2009 11:06 am
Michael Foord Aug 07, 2009 11:22 am
Alex Martelli Aug 07, 2009 02:55 pm
Steven DAprano Aug 08, 2009 06:02 am
Xavier Morel Aug 08, 2009 08:17 am
Stephen J. Turnbull Aug 08, 2009 01:19 pm
Alexander Kozlovsky Aug 14, 2009 10:41 pm
Steven DAprano Aug 10, 2009 11:45 pm
Messages in this thread