Непреднамеренная конечная запятая, которая создает кортеж

В Python оставляя конечную запятую, как это, конечно, не SyntaxError :

 In [1]: x = 1 , In [2]: x Out[2]: (1,) In [3]: type(x) Out[3]: tuple 

Но в то же время, если конечная запятая была помещена случайно , может быть трудно поймать такую ​​«проблему», особенно для новичков Python.

Я думаю, что если мы сможем уловить эту «проблему» рано , статически, с помощью функций контроля качества смарт-кода PyCharm ; mypy , pylint или flake8 анализа статического кода.

Или другая идея заключалась бы в том, чтобы ограничить / выделить, создавая один элемент, неявно, без круглых скобок . Является ли это возможным?

2 Solutions collect form web for “Непреднамеренная конечная запятая, которая создает кортеж”

pylint уже обнаруживает это как проблему ( 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. 

Это не непреднамеренное поведение, поскольку оператор кортежа is,, not () . Роль скобок здесь такая же, как и в арифметических выражениях. Поэтому вы не можете ограничивать такое создание в интерпретаторе Python, иначе это будет какой-то другой язык.

Я согласен, что конечная запятая иногда является непреднамеренной. Инструменты Lint, такие как pylint , часто могут поймать такие ошибки с помощью вывода общего типа (т.е. они видят, что вы пытаетесь добавить кортеж в число). (Также обратите внимание, что иногда конечные запятые полезны и менее непреднамеренны, например, the_only_elem, = our_list .) Другой вариант – написать вам собственный простой linter, который проверяет что-то вроде line.rstrip().endswith(',') and '=' in line (вторая проверка – разрешить объявление нескольких строк в некоторой степени).

  • Как получить доступ к функции в пакете виртуальной среды на PyCharm
  • Как мой «exe» из проекта PyCharm
  • Имеет ли pycharm какой-либо инструмент для отслеживания времени
  • Не могу установить пульт с PyCharm
  • PyCharm не может найти библиотеку
  • Использование virtualenv в Pycharm как Django IDE
  • Pycharm 3.4.1 - «AppRegistryNotReady: модели еще не загружены». Django Rest framewrok
  • Может ли PyCharm автоматически генерировать __init __ (), __eq __ () и __hash __ () реализации?
  • Python - лучший язык программирования в мире.