[Python-ideas] exception based conditional expression, similar to if-else conditional expression

Steven D'Aprano steve at pearwood.info
Sat Aug 22 07:32:14 CEST 2009


On Sat, 22 Aug 2009 11:28:04 am Ron Adam wrote:
> Greg Ewing wrote:
> > Steven D'Aprano wrote:
> >> Others have suggested that the colon should be dropped. I dislike
> >> that idea, because there's nothing but whitespace delimiting the
> >> list of exceptions from the except-expression:
> >>
> >> EXPR except EXCEPT-LIST EXCEPT-EXPR
> >
> > I agree. Even if it can be parsed unambiguously, it's
> > going to seem weird and confusing to a human.
> >
> > So far I haven't seen anything I like better than
> >
> >   <expr> except <value> if <exception>
> >
> > despite the fact that it uses the words 'except'
> > and 'if' in a different way than elsewhere.
>
> Possibly the only way to do this within those constraints 

Which constraints? Are you referring to the fact that any proposed 
syntax must be capable of being unambiguously parsed?


> is a purely syntactic.

I'm not sure I understand. Can you give an example of a proposal which 
*isn't* syntactic?

>      value = (expr1 :exception: expr2)

Are the brackets intended to be part of the syntax, or are they there 
just for grouping? In other words, would this be allowed?

value = function(expr1 :exception: expr2)

Or would we have to write this?

value = function((expr1 :exception: expr2))


> Sense most people (and editors) recognize exceptions names easily,
> there really isn't a strong need to use the key word "except" in an
> expression like this.

The word "except" cues in the reader that they are seeing an 
exception-expression, rather than some sort of data structure like 
{key:value} or (a, tuple).

For the same reason, list comprehensions use "for":

[x+1 for x in alist]

rather than mathematical notation:

{x+1 ∀ x ∈ alist}

(if that doesn't display for you, the first odd character is an upside 
down A, "for all", and the second is a curved E, "element of"). If you 
don't like unicode-based source code, we could replace the "for all" 
and "element of" symbols with colons:

[x+1 : x : alist]

but we don't because the words "for" and "in" give the reader hints as 
to what is being done, which a colon would not.

Words are just symbols, so anytime you have syntax including a keyword, 
you could replace the keyword with a symbol. That way leads to APL. As 
a general rule, keywords are more readable, punctuation is more 
concise.



-- 
Steven D'Aprano



More information about the Python-ideas mailing list