
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