[Python-Dev] (try-except) conditional expression similar to (if-else) conditional (PEP 308)
Steven D'Aprano
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
first?
[...]
> Modivation
Motivation.
> 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
Enter key.
> 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.
-1
> Option 2:
> x = float(string) except ValueError: float('nan')
> op(float(string) except ValueError: float('nan'))
[bike-shedding]
At the risk of an extra keyword, I would prefer `unless` instead of
`except`.
[/bike-shedding]
I find this the least worst of the alternatives.
-0
> 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.
-0.5
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.
--
Steven D'Aprano
More information about the Python-Dev
mailing list