11

在 Python 中,留下这样的尾随逗号当然不是SyntaxError:

In [1]: x = 1 ,

In [2]: x
Out[2]: (1,)

In [3]: type(x)
Out[3]: tuple

但同时,如果后面的逗号不小心放了,可能很难捕捉到这种“问题”,尤其是对于 Python 新手来说。

我在想我们是否可以借助智能代码质量控制功能及早、静态地发现这种“问题” ;,或静态代码分析工具。PyCharmmypypylintflake8

或者,另一个想法是限制/突出显示不带括号隐式创建一个项目元组。可能吗?

4

1 回答 1

21

pylint已经检测到这是一个问题(从 1.7 版开始)。

例如,这是我的tuple.py

"""Module docstring to satisfy pylint"""

def main():
    """The main function"""
    thing = 1,
    print(type(thing))

if __name__ == "__main__":
    main()
$ pylint tuple.py
No config file found, using default configuration
************* Module tuple
R:  5, 0: Disallow trailing comma tuple (trailing-comma-tuple)

------------------------------------------------------------------
Your code has been rated at 8.00/10 (previous run: 8.00/10, +0.00)

$ pylint --help-msg trailing-comma-tuple
No config file found, using default configuration
:trailing-comma-tuple (R1707): *Disallow trailing comma tuple*
  In Python, a tuple is actually created by the comma symbol, not by the
  parentheses. Unfortunately, one can actually create a tuple by misplacing a
  trailing comma, which can lead to potential weird bugs in your code. You
  should always use parentheses explicitly for creating a tuple. This message
  belongs to the refactoring checker. It can't be emitted when using Python <
  3.0.
于 2017-06-22T17:49:08.143 回答