In Python, leaving a trailing comma like this is, of course, not a SyntaxError
:
In [1]: x = 1 ,
In [2]: x
Out[2]: (1,)
In [3]: type(x)
Out[3]: tuple
But, at the same time, if the trailing comma was put accidentally, it may be difficult to catch this kind of a "problem", especially for Python newcomers.
I am thinking if we can catch this kind of a "problem" early, statically, with the help of PyCharm
smart code quality control features; mypy
, pylint
or flake8
static code analysis tools.
Or, another idea would be to restrict/highlight creating one item tuples implicitly without parenthesis. Is it possible?
pylint
already detects this as a problem (as of version 1.7).For example, here's my
tuple.py
:It's not an unintended behavior since the tuple operator is
,
, not()
. The role of parenthesis here is the same as in arithmetic expressions. So you can't restrict such creation in a Python interpreter, otherwise it would be some other language.I agree that a trailing comma is sometimes unintentional. Lint tools like
pylint
are often able to catch such errors by means of general type inference (i.e. they see that you try to add a tuple to a number). (Also note that sometimes trailing commas are useful and less unintentional, e.g. inthe_only_elem, = our_list
.) Another option is to write you own simple linter that checks for something likeline.rstrip().endswith(',') and '=' in line
(the second check is to allow multi-line list declaration to some extent).