[Python-Dev] (try-except) conditional expression similar to (if-else) conditional (PEP 308)
steve at pearwood.info
Tue Aug 11 01:45:58 CEST 2009
On Tue, 11 Aug 2009 12:29:32 am Dj Gilcrease wrote:
> I figure I would write up the PEP draft, I have never tried writing a
> pep before, but i did read PEP 1 and tried to follow it's formating
> guides. If there are no additions to the idea, then it seems there
> just needs to be a consensus on the syntax before submitting it to
> the peps list
Shouldn't there be consensus on whether or not this is a good idea
> Often when doing calculations or string recasting (to int, float,
> etc) it is required to wrap the section in a simple try-except
> where the exception just assigns a default value. It would be more
> readable and consise if these type of try-excepts could be written
> on a single line.
Concise (note spelling) certainly, but I question that it would be more
readable. Newlines are not a bad thing, but trying to squeeze too much
into a single line is.
When the `x if y else z` expression was first introduced, I was very
excited because I thought it would be very useful. But I soon found
that it actually wasn't that useful to me: it was rare that I wanted
it, and when I did, it was usually more readable to use an `if` block
instead. So I don't find this proposal the least bit compelling. It
seems to me to be primarily useful for saving wear and tear on the
> Syntax Ideas:
> Option 1:
> x = float(string) except float('nan') if ValueError
> op(float(string) except float('nan') if ValueError)
Looks too confusingly like an if test. I find my eye drawn to the final
clause, `if ValueError`, and expecting that to evaluate to true.
> Option 2:
> x = float(string) except ValueError: float('nan')
> op(float(string) except ValueError: float('nan'))
At the risk of an extra keyword, I would prefer `unless` instead of
I find this the least worst of the alternatives.
> Option 3:
> x = float(string) except ValueError else float('nan')
> op(float(string) except ValueError else float('nan'))
Also looks confusingly like an if test, but not as strongly as Option 1.
Should the PEP allow expressions like this?
func(obj) except str(e) if ValueError as e # Option 1
func(obj) except ValueError as e: str(e) # Option 2
func(obj) except ValueError as e else str(e) # Option 3
Justify your choice please.
More information about the Python-Dev