Почему «по умолчанию» ошибка flake8 в этом классе Python?

import typing
from dataclasses import dataclass


@dataclass
class Parameter:
    default: typing.Any = None

Я получаю ошибку flake8 в строке 7:

    default: typing.Any = None

Ошибка:

    E704 multiple statements on one line (def)

Это ошибка в парсинге flake8?


person Brian Bruggeman    schedule 16.08.2018    source источник
comment
Вы используете flake8 как минимум на Python 3.6? Тебе следует.   -  person user2357112 supports Monica    schedule 17.08.2018
comment
Да. Питон 3.7.   -  person Brian Bruggeman    schedule 17.08.2018
comment
Это не похоже на это. Похоже, вы на самом деле используете более низкую версию, не осознавая этого.   -  person user2357112 supports Monica    schedule 17.08.2018
comment
Вы уверены, что получаете Python 3.7.X при запуске flake8 --version? Я попытался запустить flake8 с вашим кодом в версии 3.6 и получил ту же ошибку, но переход на версию 3.7 исправил ее.   -  person orn688    schedule 17.08.2018
comment
flake8 --версия: 3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 3.7.0 on Darwin   -  person Brian Bruggeman    schedule 17.08.2018
comment
Как вы запускаете flake8, когда получаете это сообщение об ошибке?   -  person user2357112 supports Monica    schedule 17.08.2018
comment
До сих пор я пробовал три метода: возвышенный текстовый плагин, flake8 из верхней части репо и python -m flake8. Все они имеют одинаковый результат.   -  person Brian Bruggeman    schedule 17.08.2018
comment
Я думаю, проблема в том, что ваши pyflakes слишком старые, хотя ваш flake8 и Python достаточно новые.   -  person abarnert    schedule 17.08.2018
comment
Собственно, не pyflakes, а pycodestyle…   -  person abarnert    schedule 17.08.2018


Ответы (1)


Итак, есть хорошие новости и плохие новости.

  • flake8 — это просто оболочка для набора других инструментов, включая pycodestyle.
  • Хорошая новость заключается в том, что, насколько я могу судить, эта проблема есть в pycodestyle 2.3.1 и исправлена ​​в 2.4.0.
  • Плохая новость заключается в том, что текущая версия flake8, 3.5.0, заявляет о несовместимости с pycodestyle 2.4.0. (См. часто задаваемые вопросы о flake8, чтобы узнать, почему они даже не пытаются быть в будущем -совместим с упакованными инструментами.)
  • Хорошей новостью является то, что если вы хотите установить GitLab или GitHub, текущий мастер flake8 поддерживает pycodestyle 2.4.x (а также pyflakes 2.0.x).
  • Плохая новость заключается в том, что еще не назначена веха после 3.5.0, а это означает, что никто не утверждает, что текущая вершина дерева протестирована, стабильна и готова к выпуску, и, скорее всего, они фактически еще не закончили тестирование с 2.4.0, они только что изменили версии, потому что это то, что они намерены поддерживать.

Если я установлю pycodestyle 2.3.1 и flake8 3.5.0 (и pyflakes 1.6.0) в чистой среде 3.7, я смогу воспроизвести это предупреждение.

Если я заставлю pip установить pycodestyle 2.4.0, даже несмотря на то, что flake8 жалуется на это, предупреждение исчезнет.

Если я устанавливаю flake8 из GitLab, он перетаскивает pycodestyle 2.4.0 (и pyflakes 2.0.0), и снова предупреждение исчезает.

Это не так уж удивительно, учитывая, что версия 2.4.0 утверждает, что добавляет поддержку Python 3.7 (хотя в PyPI по-прежнему указана только версия 3.6) и исправляет несколько ошибок, связанных с E704, например этот, но при быстром сканировании я не смог найти конкретного соответствующего изменения.


К сожалению, поскольку flake8 на самом деле еще не тестировался с 2.4.0, возможно, что исправление таким образом (будь то принудительная установка несовместимых версий или установка последней версии с GitLab) сломает другие вещи.

В этом случае единственными реальными вариантами являются:

  • Сделайте это в любом случае и скрестите пальцы.
  • Запускайте pycodestyle вручную, а не через flake8. (Это означает, что его вывод не будет пофайлово объединяться с другими инструментами, он не будет понимать более мощные флаги noqa, добавленные flake8, и т. д.)
  • Подождите, пока flake8 достигнет этапа официальной поддержки pycodestyle 2.4.0 (или помогите им это сделать).
  • Найдите нужное исправление в репозитории pycodestyle и перенесите его на версию 2.3.1.
  • Отключите это предупреждение (для каждой строки, для каждого файла или глобально).
person abarnert    schedule 16.08.2018
comment
быстрое обновление для этого, выпущенный сегодня flake8 3.6.0, который исправляет это - person Anthony Sottile; 24.10.2018