Flake 8: «несколько операторов в одной строке (двоеточие)» только для имени переменной, начинающейся с «если»

Я использую flake8 в Visual Studio Code, пишу код с помощью Аннотации переменных Python 3.6. Пока все работало без проблем, но я столкнулся со странным предупреждением.

Это отлично работает:

style: str = """
width: 100%;
...
"""
# Doing sth with `style`

Это тоже:

img_style: str = """
width: 100%;
...
"""
# Doing sth with `img_style`

Однако это не так, это приводит к предупреждению ниже:

iframe_style: str = """
width: 100%;
...
"""
# Doing sth with `iframe_style`

flake8 warning

Что ж, технически это работает нормально; код работает. Но как-то flake8 этим не в восторге. Многострочная строка и следующий за ней код всегда одинаковы.

Когда я опускаю "f" (i_rame_style), я тоже не получаю предупреждения! Так что, я думаю, почему-то flake8 думает о if foo: bar() здесь !?

Что мне здесь не хватает? Это ошибка в flake8?

Что, если это просто проблема Visual Studio? Поскольку ваш код компилируется и работает так, как вы это сказали, я не вижу причин, по которым это будет ошибка flake.

xoxel 11.04.2018 13:53

Мне кажется, что что-то, скорее всего, VSC, пытается быть умным с пост-процессным разделением типичных ошибок, прежде чем отправлять их на flake.

zwer 11.04.2018 13:57

Я использую только расширение ms-python.python, и я считаю, что здесь встроена поддержка flake8. В конце концов, он использует инструмент командной строки flake8, установленный через pip.

linusg 11.04.2018 13:58

Я просто попробовал с простым flake8, и ошибка такая же ... это может быть интересно.

etene 11.04.2018 13:58

@etene спасибо! Это было бы моим следующим выстрелом ... Как я уже сказал, я понятия не имею, что происходит не так, но мне кажется, что это проблема с flake8, который выдает эти сообщения.

linusg 11.04.2018 14:00

Да, здесь flake8 не так. Вы можете посмотреть предупреждение, и это явно запрещает людям писать операторы if, такие как if x: do(y), в одной строке. Возможно, стоит отправить проблему на их страница gitlab

Patrick Haugh 11.04.2018 14:07
10
6
4 000
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Изменить: проблема в pycodestyle (pep8), который вызывается flake8. Остальное по-прежнему стоит.

Второе редактирование: я провел еще несколько исследований, и проблема исправлена ​​здесь. Однако исправление еще не выпущено.

Для меня это определенно похоже на ошибку flake8:

flakebug.py:

innocuous: str = ""
ifstarting_string: str = ""
forfalse_positivetoo: str = ""
whilethis_lookslikeabug: str = ""
elsehaha: str = ""

В оболочке:

$ # python3.6 -m pycodestyle flakebug.py gives the same results
$ python3.6 -m flake8 flakebug.py 
flakebug.py:2:18: E701 multiple statements on one line (colon)
flakebug.py:3:21: E701 multiple statements on one line (colon)
flakebug.py:4:24: E701 multiple statements on one line (colon)
flakebug.py:5:9: E701 multiple statements on one line (colon)

Похоже, что каждая строка, начинающаяся с оператора потока управления, запускает его. Держу пари, что он использует регулярное выражение, например (if|else|while|for).*:.

Я постараюсь разобраться в этом и обновить этот ответ, если смогу, а пока вы можете добавить несколько аннотаций # noqa, и все будет готово :)

Спасибо за тестирование! Я почти забыл о # noqa, всегда пытаясь сделать flake супер счастливым: D Если это окажется ошибкой flake, я обязательно открою отчет об ошибке позже в этот же день, на случай, если до тех пор никто не сделал этого. Скорее всего, вы правы с этим регулярным выражением ...

linusg 11.04.2018 14:12

На самом деле ошибка находится в pycodestyle (он же pep8), который использует flake8. Остерегайтесь этого, если вы отправите сообщение об ошибке! Я отредактирую свой ответ, чтобы отразить это.

etene 11.04.2018 14:14

И добро пожаловать! Я использую flake8 ежедневно, так что это В самом деле соответствует моим интересам.

etene 11.04.2018 14:16

Хороший улов, найти эту ссылку во втором редактировании! Он был объединен в июне 2017 года, но, наверное, можно было немного поторопиться. А пока я могу отключить предупреждение. Еще раз спасибо, на вопрос дан ответ!

linusg 11.04.2018 14:32

Другие вопросы по теме