`Ctrl` `Alt` `L » не исправляет предупреждение PEP 8: В строке продолжения E122 отсутствует отступ или отступ

#python #pycharm #refactoring #indentation #pep8

Вопрос:

Когда я получу предупреждение

PEP 8: E122 continuation line missing indentation or outdented

Ctrl Alt L не выполняет необходимые отступы. Вместо этого отступ должен быть сделан вручную.

Как будто этого было недостаточно, если я сделаю Ctrl Alt Lэто позже, строка не будет привязана к предыдущему неверному уровню, что снова вызовет вышеупомянутое предупреждение. Каково решение этой досадной неприятности?

Как и было предложено, вот пример:

 def foo():
    return range(15)


var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, 
var15 = foo()
 

Editor -> Code Style -> Markdown Настройки:

Hard wrap = 80

Wrap on typing = Yes .

Комментарии:

1. Я думаю, что было бы гораздо лучше, если бы вы включили также пример. PyCharm не всегда использует лучшее форматирование (и иногда оно непоследовательно). OTOH PEP8 тоже не без проблем, и иногда просто лучше писать код по-другому

Ответ №1:

PyCharm имеет некоторые встроенные функции, которые автоматически исправляют отступы в строке продолжения, но не для конкретного случая, показанного в вопросе.

Показанный код-Python, поэтому соответствующие настройки находятся на File > Settings > Editor > Code Style > Python > Wrapping and Braces .

Если вы посмотрите на скриншот, нужная вам функциональность работает для доступных опций, которые называются Wrap if long (используются вместе с Hard wrap at ограничением). Если вы попытаетесь сделать то же самое для любой из конструкций, у которых есть предыдущая опция (например, импорт), отступ строки продолжения будет автоматически исправлен нажатием Ctrl Alt L. Однако ваш пример предназначен для нескольких объявлений атрибутов в одной строке с распаковкой, для которой нет возможности.

снимок экрана диалога настроек IDE

Это оставляет пользователям 3 распространенных альтернативы:

  1. Используйте Python Black для форматирования кода.
  2. В этом случае выполните форматирование вручную.
  3. Не обращайте внимания на руководство по стилю PEP 8 и отключите предупреждение линтера.

Но, в заключение, это не связано с тем, что вы делаете что-то не так, и где-то нет скрытой настройки, которая позволила бы это сделать. В среде IDE просто нет функции форматирования для этой конкретной конструкции.

Вы также можете отправить запрос на функцию в JetBrains bugtracker.