У меня есть скрипт на python, и flake8 обнаружил некоторые ошибки для моего скрипта:
231 flake8
E128 continuation line under-indented for visual indent
232 flake8
E128 continuation line under-indented for visual indent
234 flake8
E128 continuation line under-indented for visual indent
235 flake8
E122 continuation line missing indentation or outdented
236 flake8
E122 continuation line missing indentation or outdented
Вот мой код:
t = someFunction (
data, title=so, Rows=1,
Widths=[1.2 * inch, 0.3 * inch,
0.1 * inch, 0.3 * inch, 2 * inch, 3 * inch,
5.00 * inch],
style=[("sth1", (0, 0), (-1, -1), "CENTER"),
("sth2", (0, 0), (-1, -1), "CENTER"),
('sth3', (0, 0), (-1, -1), 0.5, colors.grey),
('sth4', (0, 0), (-1, 0), colors.orange),
('sth5', (0, 1), (0, -1), colors.orange),
])
Я пробовал разные перестановки, и ни одна из них не работала. Может кто-нибудь сказать мне, как отформатировать эту функцию?
1 ответ
Лучший ответ
E122: Когда вы используете строку продолжения для нескольких аргументов функции, они должны использовать обычный отступ в 4 столбца.
E128: Когда вы распределяете элементы списка, dict, tuple и т. Д. По нескольким строкам, вам нужно выровнять их слева.
t = someFunction (
Widths=[1.2 * inch, 0.3 * inch,
0.1 * inch, 0.3 * inch, 2 * inch, 3 * inch,
5.00 * inch],
style=[("sth1", (0, 0), (-1, -1), "CENTER"),
("sth2", (0, 0), (-1, -1), "CENTER"),
('sth3', (0, 0), (-1, -1), 0.5, colors.grey),
('sth4', (0, 0), (-1, 0), colors.orange),
('sth5', (0, 1), (0, -1), colors.orange)]
)
Вот документация:
В строке продолжения отсутствует отступ или отступ (E122)
Строка продолжения с отступом для визуального отступа (E128)
0
Barmar
12 Сен 2019 в 23:43
#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. Однако ваш пример предназначен для нескольких объявлений атрибутов в одной строке с распаковкой, для которой нет возможности.
Это оставляет пользователям 3 распространенных альтернативы:
- Используйте Python Black для форматирования кода.
- В этом случае выполните форматирование вручную.
- Не обращайте внимания на руководство по стилю PEP 8 и отключите предупреждение линтера.
Но, в заключение, это не связано с тем, что вы делаете что-то не так, и где-то нет скрытой настройки, которая позволила бы это сделать. В среде IDE просто нет функции форматирования для этой конкретной конструкции.
Вы также можете отправить запрос на функцию в JetBrains bugtracker.
Уведомления
- Начало
- » Python для новичков
- » Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
#1 Апрель 8, 2015 11:14:13
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
Привет, и сразу заранее спасибо за помощь.
import unittestclass MyTestCase(unittest.TestCase):
def test_with_docstring(self):
"""Test that something does something
i can fly"""
def test_without_docstring(self):
passif __name__ == '__main__':
nose.run(argv=["nosetests" "***.py", "--verbosity=2"])
>>>Validation of ****** i can fly
>>>test_without_docstring (tmp.MyTestCase)
Как избавится от пробелов? (в одну строку писать нельзя т.к. PEP
Такое решение не подходит:
import unittestclass MyTestCase(unittest.TestCase):
def test_with_docstring(self):
"""Test that something does something
i can fly"""
def test_without_docstring(self):
passif __name__ == '__main__':
nose.run(argv=["nosetests" "***.py", "--verbosity=2"])
>>>Validation of ****** i can fly
Или как вариант избавится от “”
Отредактировано felix175 (Апрель 9, 2015 10:29:44)
Офлайн
- Пожаловаться
#2 Апрель 8, 2015 12:34:20
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
def refine_txt(txt): txt = txt.strip() while txt.find(' ') >= 0: txt = txt.replace(' ', ' ') return txt
Офлайн
- Пожаловаться
#3 Апрель 8, 2015 13:27:07
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
Suguby27
Так оно не работает с NOSETEST (Если я Вас правильно понял)
должно при запуске быть так:
Validation of correct ****** … ok
Validation of correct ****** … ok
Validation of correct ****** … ok
Validation of correct ****** … ok
А сейчас если исправить и просто вызвать функцию, оно не понимает что с ней сделать и выведет:
test1 (CLASS.TEST) … OK
Конечно же функция отработала
Спасибо.
Добавляю код чтоб было понятней
import noseclass Suite(unittest.TestCase):
def test1(self):
"Validation of**********************************************
"I can fly"pass
if __name__ == '__main__':
unittest.main()
Отредактировано felix175 (Апрель 8, 2015 13:34:38)
Офлайн
- Пожаловаться
#4 Апрель 9, 2015 15:46:02
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
хм, может так
class MyTestCase(unittest.TestCase): def test_with_docstring(self): refine_txt("""Test that something does something i can fly """)
хотя даже вот так
class MyTestCase(unittest.TestCase): def test_with_docstring(self): ("Test that something does something " "i can fly " "... and all" )
пайтон сцепляет подряд идущие строки
Офлайн
- Пожаловаться
#5 Апрель 10, 2015 12:54:07
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
Suguby27
хм, может так
Statement seems to have no effect less… (Ctrl+F1)
This inspection detects statements without any effect
Спасибо, но все равно подчеркивает текст
Отредактировано felix175 (Апрель 15, 2015 18:10:15)
Офлайн
- Пожаловаться
#6 Апрель 10, 2015 13:14:51
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
>>> class A: ... def m(self): ... 'line1' ... 'line2' ... 'line3' ... print(1) ... >>> a = A() >>> a.m() 1 >>> print(a.m.__doc__) line1line2line3 >>>
Офлайн
- Пожаловаться
#7 Апрель 15, 2015 18:17:29
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
Suguby27
хм, может так
1й вариант не работает
2й вариант жалуется PEP8: continuation line under-indented for visual indent
Офлайн
- Пожаловаться
#8 Апрель 15, 2015 18:21:25
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
py.user.next
Так и было реализовано но PEP8: continuation line missing indentation or outdented
Офлайн
- Пожаловаться
#9 Апрель 15, 2015 23:47:15
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
felix175
Так и было реализовано но PEP8: continuation line missing indentation or outdented
А ты в чём это всё смотришь? Потому что ошибок нет, просто эта штука срабатывает.
Причём не просто срабатывает, а ещё и пишет какими-то загадками.
Отредактировано py.user.next (Апрель 15, 2015 23:48:12)
Офлайн
- Пожаловаться
#10 Апрель 16, 2015 11:07:50
Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)
py.user.next
как сейчас
как должно быть
но при этом неправельно выводит
потому что много пробелов
Отредактировано felix175 (Апрель 16, 2015 11:12:52)
Офлайн
- Пожаловаться
- Начало
- » Python для новичков
- » Настройка вывода информации AUTOMATION TESTS c библиотекой nosetests (unittest)