On 7/9/2010 10:40 AM, Mark Dickinson wrote:
While looking at a parser module issue
(http://bugs.python.org/issue9154) I noticed that Python's grammar
doesn't permit trailing commas after keyword-only args.  That is,

     def f(a, b,):  pass

is valid syntax, while

     def f(*, a, b,): pass

is not.  I was just curious whether the latter was deliberate or an
oversight.  And if an oversight, is it worth fixing after the
moratorium expires?  (See also http://bugs.python.org/issue2009.)

The way I read the grammar in the function definition section of the manual, a trailing comma is only allowed after a 'defparameter' that does not come after a *. In this sense, the above is not a bug.

However, while the grammar in the call doc does not allow trailing commas, the following note says "A trailing comma may be present after the positional and keyword arguments but does not affect the semantics."

This has the combined effect

>>> def f(*,a): pass

>>> f(a=1)
>>> f(a=1,)
>>> def f(*,a,): pass
SyntaxError: invalid syntax

This violates the important principle that allowed def and call arg sequences should match to the extent sensible and possible. In this sense, the SyntaxError is a bug. So I would fix this now for 3.2 and notify the other implementors.

--
Terry Jan Reedy

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to