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 float('nan') The 'else' part handles any other exceptions (not necessarily a good idea!). or: 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')) > [snip] -1
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4