E302 expected 2 blank lines found 1 как исправить

I'm using vim editor as python IDE. Below is a simple python program to calculate square root of a number: import cmath def sqrt(): try: num = int(input("Enter the number : ")) ...

I’m using vim editor as python IDE. Below is a simple python program to calculate square root of a number:

import cmath
def sqrt():
    try:
        num = int(input("Enter the number : "))
        if num >= 0:
            main(num)
        else:
            complex(num)
    except:
        print("OOPS..!!Something went wrong, try again")
        sqrt()
    return

def main(num):
    squareRoot = num**(1/2)
    print("The square Root of ", num, " is ", squareRoot)
    return

def complex(num):
    ans = cmath.sqrt(num)
    print("The Square root if ", num, " is ", ans)
    return

sqrt()

And the warnings are :

1-square-root.py|2 col 1 C| E302 expected 2 blank lines, found 0 [pep8]
1-square-root.py|15 col 1 C| E302 expected 2 blank lines, found 1 [pep8]
1-square-root.py|21 col 1 C| E302 expected 2 blank lines, found 0 [pep8]

Can you please tell why these warnings are coming?

enter image description here

renatodamas's user avatar

renatodamas

14.3k6 gold badges33 silver badges47 bronze badges

asked Nov 1, 2015 at 20:30

Amit Upadhyay's user avatar

Amit UpadhyayAmit Upadhyay

7,0114 gold badges43 silver badges56 bronze badges

2

import cmath


def sqrt():
    try:
        num = int(input("Enter the number : "))
        if num >= 0:
            main(num)
        else:
            complex_num(num)
    except:
        print("OOPS..!!Something went wrong, try again")
        sqrt()
    return


def main(num):
    square_root = num**(1/2)
    print("The square Root of ", num, " is ", square_root)
    return


def complex_num(num):
    ans = cmath.sqrt(num)
    print("The Square root if ", num, " is ", ans)
    return

sqrt()

The previous will fix your PEP8 problems. After your import you need to have 2 new lines before starting your code. Also, between each def foo() you need to have 2 as well.

In your case you had 0 after import, and you had 1 newline between each function. Part of PEP8 you need to have a newline after the end of your code. Unfortunately I don’t know how to show it when I paste your code in here.

Pay attention to the naming, it’s part of PEP8 as well. I changed complex to complex_num to prevent confusion with builtin complex.

In the end, they’re only warning, they can be ignored if needed.

answered Nov 1, 2015 at 21:06

Leb's user avatar

You need to give two blank lines between meaningful code blocks.

These include (for example):

  • The import block
  • Each function

8bitjunkie's user avatar

8bitjunkie

12.6k9 gold badges54 silver badges70 bronze badges

answered Aug 9, 2017 at 9:59

Balaji Wanole's user avatar

1

Here is the link to the documentation:
PEP8 Style Guide for Python
You should add two spaces between the functions, as shown below:

import cmath


def sqrt():
    try:
        num = int(input("Enter the number : "))
        if num >= 0:
            main(num)
        else:
            complex_num(num)
    except:
        print("OOPS..!!Something went wrong, try again")
        sqrt()
    return


def main(num):
    square_root = num ** (1 / 2)
    print("The square Root of ", num, " is ", square_root)
    return


def complex_num(num):
    ans = cmath.sqrt(num)
    print("The Square root if ", num, " is ", ans)
    return


sqrt()

answered Aug 9, 2017 at 10:06

Lakshmikant Deshpande's user avatar

1

with warnings:-  
import math  
def my():  
    print("hello world")  
my()

Without warnings:-  
import math 


def my():  
    print("hello world")  
my()

Here if you see the two lines space after import statement for second code snippet which will not give any warnings.
Again if you are writing two methods definition you have two give two lines as space between your code block.

answered Aug 9, 2017 at 11:24

Balaji Wanole's user avatar

All answers seem to be correct. To avoid doing this by hand, you can also use the autopep8 package (pip install autopep8). The result of calling autopep8 filename.py is the same:

import cmath


def sqrt():
    try:
        num = int(input("Enter the number : "))
        if num >= 0:
            main(num)
        else:
            complex(num)
    except:
        print("OOPS..!!Something went wrong, try again")
        sqrt()
    return


def main(num):
    squareRoot = num**(1/2)
    print("The square Root of ", num, " is ", squareRoot)
    return


def complex(num):
    ans = cmath.sqrt(num)
    print("The Square root if ", num, " is ", ans)
    return


sqrt()

PS: have a look at if __name__ == "__main__":

answered Mar 8, 2018 at 9:48

serv-inc's user avatar

serv-incserv-inc

34.6k9 gold badges161 silver badges182 bronze badges

Время прочтения
7 мин

Просмотры 125K


Автор: Анатолий Соловей, developer

Язык программирования Python очень востребован на современном рынке, он развивается изо дня в день, и вокруг него сложилось активное сообщество. Во избежание конфликтов между разработчиками-питонистами, создатели языка написали соглашение PEP 8, описывающее правила оформления кода, однако даже там отмечено, что:

Many projects have their own coding style guidelines. In the event of any conflicts, such project-specific guides take precedence for that project.

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

За долгое время работы у программистов вырабатывается собственный стиль написания кода, предпочтения в стайлгайдах и прочие мелочи, которые оставляют авторскую печать на программах девелопера. Убедить разработчиков отказаться от привычных им кодстайлов очень сложно, но, даже если это удастся, велик шанс, что в их коде будут проскакивать старые фишки, добавленные в силу привычки.

Когда каждый апдейт проходит строгий код ревью, включающий в себя проверку стилей, подобные ошибки могут очень сильно замедлять процесс разработки. А если ошибки в итоге не заметят даже в процессе ревью, в системе контроля версий проекта очень скоро появится куча нечитаемого и непонятного кода.

На помощь в этом случае приходят линтеры — инструменты, контролирующие оформление кода в проекте. Именно они помогают поддерживать его чистоту и, в нашем случае, предотвращать создание коммитов, которые могут содержать ошибки. Я для контроля качества использую Flake8 и сейчас постараюсь объяснить, почему выбрал именно его, и расскажу, как его настроить, чтобы получить максимальный результат. Заинтересовались? Добро пожаловать под кат.

Flake8: Your Tool For Style Guide Enforcement

Сам Flake8 — инструмент, позволяющий просканировать код проекта и обнаружить в нем стилистические ошибки и нарушения различных конвенций кода на Python.

Flake8 умеет работать не только с PEP 8, но и с другими правилами, к тому же поддерживает кастомные плагины, поэтому в дальнейшем в этой статье я буду отталкиваться от правил из Google Python Style Guide.

Почему Flake8?

Flake8: pep8 + pyflakes + more

Создатель Flake8 Тарек Зиаде ставил перед собой цель объединить главные популярные инструменты контроля кодстайла в одной библиотеке, с чем в итоге успешно справился — Flake8 получился действительно универсальным.

Легкость установки и конфигурации

Чтобы проверить, отвечает ли код в вашем проекте основным требованиям PEP 8, достаточно установить Flake:

$ pip install flake8

и запустить его — просто ввести в командной строке:

$ flake8 my_project

после чего вы получите список с именами файлов и номерами строк, где были допущены ошибки, и подробное описание самих ошибок:

$ flake8 my_project
myfile.py:1: 'sys' imported but unused
myfile.py:4:1: E302 expected 2 blank lines, found 1

Великолепно, не правда ли? Но и это не всё. Если вы не любитель работать с консолью, то вы можете настроить интеграцию Flake8 с IDE или редактором, который вы предпочитаете использовать.

Интеграция Flake8 с редакторами и IDE

Интеграция с PyCharm
Так же актуально и для любой другой IDE от JetBrains.
Интеграция проводится всего за пару несложных шагов.

Откройте настройки External Tools в File → Settings → Tools и нажмите на “+”, затем заполните поля по этому шаблону:

После этого нажмите на Output Filters, а затем на “+”, чтобы добавить новое правило для вывода сообщений от флейка:


Здесь мы говорим PyCharm, что хотим, чтобы в выводе строки с ошибками были кликабельными и открывали в редакторе файл и место с ошибкой

Все. Интеграция Flake8 с PyCharm закончена. Чтобы вызвать флейк и проверить свой код, кликаем правой кнопкой мыши на файл/директорию, которую мы хотим проверить, и в контекстном меню выбираем External Tools → Flake8.

В выводе PyCharm появится кликабельный список нарушений в выбранном файле/директории:

Интеграция с Atom
Чтобы установить инструмент Flake8 для Atom, используйте Atom package manager в Settings и найдите там linter-flake8:

Или вызовите


apm install flake8

из командной строки.

Затем перейдите в linter-flake8 settings и укажите путь к директории, где установлен flake8:

У linter-flake8 есть собственный ReadMe по настройке, с которым при желании вы можете ознакомиться на странице самого linter-flake8 в Atom.

Наличие Version Control Hooks

Именно это я считаю главным достоинством Flake8, которое выделяет его среди других линтеров. В отличии от большинства подобных инструментов, где для настройки VCS-хуков используются целые отдельные библиотеки и модули (как, например, в Pylint), настройка хуков в флейке проводится буквально в две строчки.

На момент написания этой статьи, Flake8 умеет использовать pre-commit-хуки для Git и Mercurial. Эти хуки позволяют, например, не допускать создания коммита при нарушении каких-либо правил оформления.

Установить хук для Git:

$ flake8 --install-hook git

И настроить сам гит, чтобы учитывать правила Flake8:

$ git config --bool flake8.strict true

Я продемонстрирую, как Git hook работает на проекте, который я использовал для примера интеграции Flake8 с PyCharm. В модуле flake8tutorial.py мы видим очевидные ошибки: импортированные и неиспользованные модули, остсутствие докстринга и пустой строки в конце файла.

Первым делом проинициализируем в этом проекте git-0репозиторий, установим flake8 хук и скажем нашему git, что он должен прогонять флейк перед коммитами:

Затем попробуем провести первый коммит:

Как видите, flake8 был вызван перед коммитом и не позволил нам закоммитить невалидные изменения.

Теперь фиксим ошибки, отмеченные флейком, и пытаемся закоммитить валидный код:

Коммит успешно создан. Отлично!

Настройка Flake8 для Mercurial практически идентична. Для начала нужно установить Flake8 Mercurial Hook:

$ flake8 --install-hook mercurial

И настроить сам Mercurial:

$ hg config flake8.strict true

Вот и все, хук для Меrcurial установлен, настроен и готов к использованию!

Подробнее о конфигурации Flake8

Базовая конфигурация

Список дополнительных опций и правил можно передать прямо при вызове из командной строки таким образом:

flake8 --select E123

(в этом примере опцией select мы говорим, чтобы Flake сообщал о нарушениях только правила E123 (это код правила “closing bracket does not match indentation of opening bracket’s line”)).

Кстати, полный список опций с описанием вы можете найти в документации к самой библиотеке.

На мой взгляд, куда предпочтительнее настраивать Flake с помощью конфигурационных файлов, вы можете хранить настройки в одном из файлов setup.cfg, tox.ini или.flake8. Для ясности я предпочитаю использовать последний вариант.

Файл с настройками позволяет контролировать использование библиотекой тех же опций, что настраиваются для командной строки, базовый конфигурационный файл выглядит так:

[flake8]
ignore = D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist

В этом файле мы сообщаем Flake, что он не должен оповещать нас о нарушениях правила D203 (“1 blank line required before class docstring”), а также не должен проверять файлы .git, __pycache__, docs/source/conf.py и директории old, build, dist.

В конфигурационных файлах можно оставлять комментарии, это полезно делать, если вы предоставляете большой список правил, которые Flake должен игнорировать:

[flake8]
# it's not a bug that we aren't using all of hacking
ignore =
    # F812: list comprehension redefines ...
    F812,
    # H101: Use TODO(NAME)
    H101,
    # H202: assertRaises Exception too broad
    H202,
    # H233: Python 3.x incompatible use of print operator
    H233,
    # H301: one import per line
    H301,
    # H306: imports not in alphabetical order (time, os)
    H306,
    # H401: docstring should not start with a space
    H401,
    # H403: multi line docstrings should end on a new line
    H403,
    # H404: multi line docstring should start without a leading new line
    H404,
    # H405: multi line docstring summary not separated with an empty line
    H405,
    # H501: Do not use self.__dict__ for string formatting
    H501

Также можно добавить в исключения отдельную строку в вашем модуле, просто оставив на этой строке комментарий noqa. Тогда при проверке модуля Flake8 будет игнорировать ошибки, найденные в строках, помеченных этим комментарием:

import sys # noqa

Модули, расширяющие функциональность

Так как Flake позволяет создавать и использовать кастомные плагины, для него можно найти большое количество open-source плагинов. Я опишу только те, которые использую сам и считаю особенно полезными:

flake8-import-order

Плагин, проверяющий порядок импортов в проекте: в стандартной конфигурации первыми должны идти импорты стандартных библиотек (stdlib), затем импорты сторонних библиотек, а потом локальные пакеты, причем каждая группа отделена пустой строкой и отсортирована в алфавитном порядке.

Этот плагин расширяет список предупреждений Flake, добавляя туда три новых:

  • I100: Your import statements are in the wrong order.
  • I101: The names in your from import are in the wrong order.
  • I201: Missing newline between sections or imports.

Установка:

pip install flake8-import-order

Конфигурация:

[flake8]
application-import-names = my_project, tests # Указываем флейку директории, в которых хранятся локальные пакеты.

import-order-style = google # Указываем флейку на то, в каком порядке должны идти импорты. Как я уже говорил выше, я предпочитаю использовать Google Style Guide.

Более подробно о настройке flake8-import-order можно прочитать на странице библиотеки на Github.

flake8-docstrings

Плагин, добавляющий поддержку функционала из pydocstyle — проверку докстрингов на соответствие конвенциям Питона.

Установка:

pip install flake8_docstrings

Список добавляемых этой библиотекой правил можно найти в документации pydocstyle.

Конфигурация:

Сама по себе эта библиотека никак не настраивается, однако добавленные правила можно внести в исключения, если какое-то из них неактуально для вашего проекта:

[flake8]
ignore = D101 # Игнорировать docstrings предупреждение “Missing docstring in public class”

Страница библиотеки на Github тут.

flake8-builtins

Плагин, проверяющий код на использование встроенных имен в качестве переменных или параметров.

Установка:

pip install flake8-builtins

Конфигурация:

Как и в случае с flake8-docstrings, у плагина нет дополнительных настроек, но добавленные им правила можно, например, внести в исключения флейка:

[flake8]
ignore = B001 # Игнорировать builtins предупреждение “<some_builtin> is a python builtin and is being shadowed, consider renaming the variable”

Более подробную информацию об этом плагине можно найти на странице этого плагина на Github.

flake8-quotes

Плагин, позволяющий контролировать тип кавычек, которые будут использоваться в проекте.

Установка:

pip install flake8-quotes

Конфигурация:

[flake8]
inline-quotes = " # Указываем, какой тип кавычек должен использоваться в вашем проекте

Более подробную информацию об этом плагине можно найти на странице этого плагина на Github.

Послесловие

Хотя настройки, описанные выше, в 97,5 % случаев смогут предотвратить появление некачественного кода в репозитории, он так или иначе может оказаться запушенным (например, если деву было лень вводить две строчки для настройки pre-commit hook). Поэтому я настоятельно рекомендую добавить вызов Flake8 на этапе билда пул-реквестов в используемой вами системе continuous integration, чтобы предотвратить мердж невалидных пул-реквестов и попадание ошибок в мастер.

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

Список источников:

  • Документация Flake8
  • Useful Python Modules: Flake8
  • Google Python Style Guide
import cmath


def sqrt():
    try:
        num = int(input("Enter the number : "))
        if num >= 0:
            main(num)
        else:
            complex_num(num)
    except:
        print("OOPS..!!Something went wrong, try again")
        sqrt()
    return


def main(num):
    square_root = num**(1/2)
    print("The square Root of ", num, " is ", square_root)
    return


def complex_num(num):
    ans = cmath.sqrt(num)
    print("The Square root if ", num, " is ", ans)
    return

sqrt()

Предыдущие исправят проблемы PEP8. После вашего импорта вам нужно иметь 2 новые строки перед началом кода. Кроме того, между каждым def foo() вам также должно быть 2.

В вашем случае у вас было 0 после импорта, и у вас была 1 новая линия между каждой функцией. Часть PEP8 вам нужно иметь новую строку после окончания вашего кода. К сожалению, я не знаю, как это показать, когда я вставляю код здесь.

Обратите внимание на именование, это часть PEP8. Я изменил complex на complex_num, чтобы предотвратить путаницу со встроенным complex.

В конце концов, они только предупреждают, их можно игнорировать при необходимости.

milwey

0 / 0 / 0

Регистрация: 26.10.2021

Сообщений: 14

1

В чем здесь ошибка, не понимаю

03.11.2021, 15:40. Показов 3856. Ответов 11

Метки нет (Все метки)


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def bubble(line, bruh=None):
    amount_of_lines = len(line)
    switch = False
    while not switch:
        switch = True
    for i in range(amount_of_lines - 1):
        if bruh(line[i]) > bruh(line[i + 1]):
                line[i], line[i + 1] = line[i + 1], line[i]
                switch = False
def conclusion():
    line = [input() for _ in range(3)]
    bubble(line, bruh=lambda x: (len(x), x))
    print(*line, sep="n")

Ошибка оформления кода.

stdout:
/bin/sh ./build.sh 1>&2
Makefile:2: recipe for target ‘build’ failed

stderr:
./solution.py:8:17: E117 over-indented
./solution.py:10:1: E302 expected 2 blank lines, found 0
Код не соответствует стандарту PEP8
или в нем есть синтаксические ошибки
make: *** [build] Error 1

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

03.11.2021, 15:40

11

4044 / 2984 / 1076

Регистрация: 21.03.2016

Сообщений: 7,511

03.11.2021, 17:34

2

а что в вашей портянке можно понять??? выделить и по скринам действовать

В чем здесь ошибка, не понимаю

В чем здесь ошибка, не понимаю



3



milwey

0 / 0 / 0

Регистрация: 26.10.2021

Сообщений: 14

03.11.2021, 20:06

 [ТС]

3

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def bubble(line, bruh=None):
amount_of_lines = len(line)
switch = False
while not switch:
switch = True
for i in range(amount_of_lines - 1):
if bruh(line[i]) > bruh(line[i + 1]):
line[i], line[i + 1] = line[i + 1], line[i]
switch = False
def conclusion():
line = [input() for _ in range(3)]
bubble(line, bruh=lambda x: (len(x), x))
print(*line, sep="n")



0



Status 418

Эксперт Python

3147 / 1855 / 527

Регистрация: 26.11.2017

Сообщений: 4,557

Записей в блоге: 2

03.11.2021, 20:11

4

Semen-Semenich, теперь отступам придется учить



1



0 / 0 / 0

Регистрация: 26.10.2021

Сообщений: 14

03.11.2021, 20:19

 [ТС]

5

там после «:» должно быть четыре пробела.
Но основная ошибка такая:
Ошибка оформления кода.

stdout:
/bin/sh ./build.sh 1>&2
Makefile:2: recipe for target ‘build’ failed

stderr:
./solution.py:8:17: E117 over-indented
./solution.py:10:1: E302 expected 2 blank lines, found 0
Код не соответствует стандарту PEP8
или в нем есть синтаксические ошибки
make: *** [build] Error 1



0



3690 / 2269 / 491

Регистрация: 07.11.2019

Сообщений: 3,829

03.11.2021, 20:21

6

milwey, отступы сделай!



0



0 / 0 / 0

Регистрация: 26.10.2021

Сообщений: 14

03.11.2021, 20:27

 [ТС]

7

Вот такая задача:
Формат ввода
Вводятся три строки.
Формат вывода
Вывести эти строки в порядке возрастания длины строки. Если длины одинаковы, то по алфавиту.
Пример 1
Ввод
Rhinactinidia eremophila
Rhododendron parvifolium
Melilotoides platycarpos

Вывод
Melilotoides platycarpos
Rhinactinidia eremophila
Rhododendron parvifolium

Добавлено через 1 минуту
u235, я не понимаю как их сделать в этом окошке быстрого ответа



0



3690 / 2269 / 491

Регистрация: 07.11.2019

Сообщений: 3,829

03.11.2021, 20:27

8

milwey, пробелами, как и в редакторе кода.
и код должен быть в тегах.
один тег открывающий, другой закрывающий с косой чертой.
[PYTHON]
и [/PYTHON]



1



milwey

0 / 0 / 0

Регистрация: 26.10.2021

Сообщений: 14

03.11.2021, 20:40

 [ТС]

9

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def bubble(line, bruh=None):
    amount_of_lines = len(line)
switch = False
while not switch:
    switch = True
for i in range(amount_of_lines - 1):
    if bruh(line[i]) > bruh(line[i + 1]):
        line[i], line[i + 1] = line[i + 1], line[i]
switch = False
def conclusion():
    line = [input() for _ in range(3)]
bubble(line, bruh=lambda x: (len(x), x))
print(*line, sep="n")

Добавлено через 3 минуты
u235, поняла, спасибо!
но у меня так и осталась вот эта ошибка:
Ошибка оформления кода.

stdout:
/bin/sh ./build.sh 1>&2
Makefile:2: recipe for target ‘build’ failed

stderr:
./solution.py:8:17: E117 over-indented
./solution.py:10:1: E302 expected 2 blank lines, found 0
Код не соответствует стандарту PEP8
или в нем есть синтаксические ошибки
make: *** [build] Error 1

Я не знаю, как ее исправить



0



3690 / 2269 / 491

Регистрация: 07.11.2019

Сообщений: 3,829

03.11.2021, 20:48

10

milwey, тебе пишет ошибку, что проблемы с отступами. Исправь отступами (пробелами). Почитай про форматирование кода в Python отступами, если проблемы с пониманием.
Теги html и code не нужны. Тебе же скрин показал Semen-Semenich, как надо.



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

33875 / 18902 / 3981

Регистрация: 12.02.2012

Сообщений: 31,694

Записей в блоге: 13

04.11.2021, 08:18

11

milwey, пока не научишься правильно расставлять тэги — не трогай Питон!



1



Автоматизируй это!

Эксперт Python

6481 / 4174 / 1140

Регистрация: 30.03.2015

Сообщений: 12,320

Записей в блоге: 29

04.11.2021, 09:45

12

Цитата
Сообщение от Catstail
Посмотреть сообщение

пока не научишься правильно расставлять тэги — не трогай Питон!

отлить в граните!



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

04.11.2021, 09:45

Помогаю со студенческими работами здесь

В чём здесь ошибка?
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main()
{
char str1;
char str2;
int i,g;…

В чём здесь ошибка?
Вот код программы//
// Conversion — Прогграмма для преобразования
// температтуры по Цельсию в…

В чём здесь ошибка?
В чём здесь ошибка?

#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
#include &lt;string.h&gt;
using…

В чем здесь ошибка ?
&lt;?php
header(&quot;Content-Type: text/plain; charset=utf-8&quot;);
$lab=array();
$n=50;
$waves=array();…

В чем здесь ошибка?
.ORG0H;
AJMP BEGIN ; переход на начало программы
.ORG 30H;

В чём здесь ошибка?
#include &lt;vcl.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;math.h&gt;
using namespace std;…

В чем здесь ошибка?
class Nastya {

public static void main(String args)
throws java.io.IOException {
char…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

12

When to Use Two Blank Lines? PEP 8 Style Guide

Surround top-level function and class definitions with two blank lines.
Figure: The golden rule of when to use two blank lines in Python.

The following two rules will provide you a sufficient heuristic on when to use two blank lines:

  1. Surround top-level function and class definitions with two blank lines.
  2. Insert two blank lines after the import statements if the code that follows starts with a top-level function or class definition.

The second rule is a consequence of the first rule so it could be technically ommitted.

When to Use Single Blank Lines? PEP 8 Style Guide

The following four rules will provide you a sufficient heuristic on when to use a single blank line:

  1. Use one or more extra single blank lines to separate groups of related functions.
  2. Use a single blank line in functions to separate logical sections.
  3. Use a single blank line to surround method definitions inside a class.
  4. Do not use a single blank line between related Python one-liners.

Let’s have a look at some examples in code next!

Two Blank Lines Top Level Functions

#1.1 – Surround top-level function with two blank lines.

WRONG:

import x

def f():
    pass

f()

CORRECT:

import x


def f():
    pass


f()

One Blank Line Non-Top-Level Function

#1.2 – Surround non-top-level function with single blank lines.

WRONG:

import x


def f():


    def g():
        pass


    g()


f()

CORRECT:

import x


def f():

    def g():
        pass

    g()


f()

Two Blank Lines Top-Level Class Definition

#1.3 – Surround top-level class definitions with two blank lines.

WRONG:

print('hello')

class X:
  
    class Y:
        pass

    class Z:
        pass

print('world')

CORRECT:

print('hello')


class X:
  
    class Y:
        pass

    class Z:
        pass


print('world')

Note that the non-top-level class definitions Y and Z are not surrounded with two blank lines which is correct and in accordance with the rule.

Two Blank Lines Import Statements

While many online sources state that there should be two blank lines after the import statements before the code starts, this is not generally correct. PEP 8 only states that top-level function or class definitions should be surrounded by two blank lines!

PEP 8 doesn’t talk about import statements specifically in regards of insertion of two blank lines!

  • If the import block is followed by a function or class definition, you should insert two blank lines in accordance to this rule.
  • If the import block is followed by, say, a global variable definition, you shouldn’t insert two blank lines—one is enough!

Import Statements Followed by Two Blank Lines:

The following code snippet exemplifies the correct insertion of two blank lines after the import statement. But the blank lines are not there because of the import statement. They are there because of the top-level function definition of f.

# Correct
import x
import y
import z


def f():
    pass


f()

Import Statements NOT Followed by Two Blank Lines:

The following code snippet exemplifies the correct insertion of only one empty line after the import statement because we define a global variable MY_VAR that is neither a class nor a function definition and, thereby, shouldn’t be surrounded by two blank lines!

# Correct
import x
import y
import z

MY_VAR = 42

The logical implication is that the rule import statements should be followed by two blank lines is incorrect!

Next, we’ll explore some examples where only one single blank line can or should be inserted.

Single Blank Lines

#3 – Use one or more extra single blank lines to separate groups of related functions.

def f1():
    pass


def f2():
    pass


def f3():
    pass




def g1():
    pass


def g2():
    pass


def g3():
    pass

#4 – Use a single blank line in functions to separate logical sections.

def f1():
    print('first')
    print('logical')
    print('section')

    print('second')
    print('logical')
    print('section')


f1()

#5 – Use a single blank line to surround method definitions inside a class.

class X:

    def __init__(self):
        pass

    def x1():
        pass

    def x2():
        pass

    def x3():
        pass


x = X()

x.x1()
x.x2()
x.x3()

A common style error is to surround method definitions by two lines instead of one because people wrongly remember rule #1.

Here’s such a wrong example:

# WRONG
class X:


    def __init__(self):
        pass


    def x1():
        pass


    def x2():
        pass


    def x3():
        pass


x = X()

x.x1()
x.x2()
x.x3()

Too much whitespace!

Do not surround method definitions with two blank lines!

Blank Lines Around One-Liners

#6 – Do not use a single blank line between related Python one-liners.

For example, if you write the specification of three functions for later implementation, you can simply omit the blank lines around one-liner function definitions to avoid too much whitespace in the code.

Like so:

def f1(): pass
def f2(): pass
def f3(): pass

Expected 2 blank lines, found 0 (E302)

Python may raise an error or informational message:

  • expected 2 blank lines, found 0 (E302)
  • expected 2 blank lines, found 1 (E302)

To fix this error, surround the top-level function or class definitions with two blank lines instead of zero or one to adhere to the PEP 8 style guide.

No! Do NOT Do This:

def f1():
    pass
def f2():
    pass

Yes! Do This Instead:

def f1():
    pass


def f2():
    pass

Here are some quick references for further reading.

References:

  • https://stackoverflow.com/questions/2953250/python-pep8-blank-lines-convention
  • https://peps.python.org/pep-0008/#blank-lines
  • https://www.reddit.com/r/learnprogramming/comments/tnmhwe/when_to_use_blank_lines_in_python_in_order_to/
  • https://www.flake8rules.com/rules/E302.html

Programmer Humor

“Real programmers set the universal constants at the start such that the universe evolves to contain the disk with the data they want.” — xkcd

While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.

To help students reach higher levels of Python success, he founded the programming education website Finxter.com. He’s author of the popular programming book Python One-Liners (NoStarch 2020), coauthor of the Coffee Break Python series of self-published books, computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.

His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • E3004 this package is for device как исправить
  • E30 4 ошибка мтс тв приставка
  • E30 4 ошибка мтс спутниковое тв
  • E2l ошибка lg стиральная машина
  • E2d5 ошибка bmw x6

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии