创建元组的无意尾随逗号
Unintentional trailing comma that creates a tuple
在Python中,像这样在尾部留一个逗号,当然不是SyntaxError
:
In [1]: x = 1 ,
In [2]: x
Out[2]: (1,)
In [3]: type(x)
Out[3]: tuple
但是,同时,如果尾部的逗号不小心,可能很难捕捉到这种"problem",尤其是Python新人。
我在想我们是否可以在 "problem" 早期 静态地捕获这种 PyCharm
智能代码质量控制功能; mypy
、pylint
或 flake8
静态代码分析工具。
或者,另一种想法是 restrict/highlight 隐式创建一个没有括号的项目元组 。可能吗?
pylint
已经检测到这是一个问题 (as of version 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.
在Python中,像这样在尾部留一个逗号,当然不是SyntaxError
:
In [1]: x = 1 ,
In [2]: x
Out[2]: (1,)
In [3]: type(x)
Out[3]: tuple
但是,同时,如果尾部的逗号不小心,可能很难捕捉到这种"problem",尤其是Python新人。
我在想我们是否可以在 "problem" 早期 静态地捕获这种 PyCharm
智能代码质量控制功能; mypy
、pylint
或 flake8
静态代码分析工具。
或者,另一种想法是 restrict/highlight 隐式创建一个没有括号的项目元组 。可能吗?
pylint
已经检测到这是一个问题 (as of version 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.