Ошибка over indented

For lines that are too long (e.g. > 79 characters), you can use parentheses to group your conditions:

if (first_index < 0 
        or second_index > self._number_of_plates - 1
        or condition2
        and candition3):
    raise ValueError

Note that any boolean conditions (or, and) should go at the start of the line before the condition.

In your case, there is a special rule because of the if (...) construct:

When the conditional part of an if-statement is long enough to require
that it be written across multiple lines, it’s worth noting that the
combination of a two character keyword (i.e. if), plus a single space,
plus an opening parenthesis creates a natural 4-space indent for the
subsequent lines of the multiline conditional. This can produce a
visual conflict with the indented suite of code nested inside the
if-statement, which would also naturally be indented to 4 spaces. This
PEP takes no explicit position on how (or whether) to further visually
distinguish such conditional lines from the nested suite inside the
if-statement. Acceptable options in this situation include, but are
not limited to:

# No extra indentation.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

(Also see the discussion of whether to break before or after binary
operators below.)

Source: PEP 8 Style Guide

Code should have consistent indentation, typically spaced out in increments of two or four.

Anti-pattern

The print function on the following line is indented at five spaces instead of four.

if True:
     print('Hi there')

Best practice

The code is now spaced out at four spaces instead of five.

if True:
    print('Hi there')

Additional links

  • https://www.python.org/dev/peps/pep-0008/#indentation

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Open

anntzer opened this issue

Sep 10, 2017

· 5 comments


· May be fixed by #866

Comments

@anntzer

Consider

[obj for obj in iterator
 if some_long_cond()
    and some_other_cond()]
(obj for obj in iterator
 if some_long_cond()
    and some_other_cond())
sorted(obj for obj in iterator
       if some_long_cond()
          and some_other_cond())

I would consider that this is a reasonable, and perhaps even the correct way to indent such expressions, assuming you adhere to the «binary operators after linebreak» school and also assuming that the expressions are too long to fit in a single line.

Interestingly, pycodestyle is happy with the indenting of the first two expressions, but complains about the last one

test.py:9:11: E127 continuation line over-indented for visual indent

(Note that it is able to recognize the correct amount of indenting needed in the first two expressions — adding or removing a space before «and» results in the same warning as for the third expression.)


Edit: note to self or whoever will work on this: the first two cases actually work «accidentally» because the indent of the last line is 4 characters, which is always accepted — prepending the thing e.g. with the_list = [... and indenting the rest to align makes the thing fail again.)

@FichteFoll

I think the fundamental construct here is the conditional. The proposed indentation doesn’t work outside of comprehensions either:

abc = (1 if a
            and 2
         else b)

I don’t think PEP 8 mentions anything about this, but I haven’t looked either.

@anntzer



Copy link


Contributor


Author

The conditional in
(foo for foo in bar if quux)
and in
(foo if bar else quux)
are quite different objects (one is a clause to a comprehension, the other a ternary).

@FichteFoll

That is correct. I was just thinking that inline if wasn’t considered for indentation rules at all and pointing to another usage of it.

@anntzer
anntzer

linked a pull request

May 13, 2019

that will
close
this issue

@flutefreak7

I’m getting a related problem with the following code:

import pandas as pd
data = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [0, 0, 0, 0, 0], 'C': [4, 5, 6, 7, 8]})
nonzero = (data != 0)
print(nonzero)

I get E128 continuation line underindented on the print(col) line. Looks like the parenthesis around data != 0 is confusing it somehow.

@asottile

@flutefreak7 I cannot reproduce, please create a new issue with more information (version, etc.)

@asottile
asottile

changed the title
«continuation line over-indented» when comprehension is an argument

E127: «continuation line over-indented» when comprehension is an argument

Jun 14, 2020

Power went out, then pycharm acted like it was running for the first time. I have set up the editor to use tabs with python, but at the start of every indented block I get a squiggly with the message:

Pep 8 over-indented

I’m not indenting with any spaces, only tabs. Same projects didn’t complain before. Now all files have this problem.

Chose the ‘reformat file’ option, but the problem persists. I made sure that the project and IDE profiles python options were set to use tabs, widths 4, 4, 4.

Thanks for any help!

elpy (or rather flake8 I suppose) complains about a line over-indented on the line 52 (see below image)

enter image description here

I tried to change this line’s begin but no change.
I always use TAB to have the correct indentation (and this position is where TAB leads).

Here’s my elpy config:

Emacs.............: 26.3
Elpy..............: 1.33.0
Virtualenv........: None
Interactive Python: python3 3.8.3 (/usr/bin/python3)
RPC virtualenv....: rpc-venv (/home/david/.emacs.d/elpy/rpc-venv)
 Python...........: /usr/bin/python3 3.8.3 (/usr/bin/python3)
 Jedi.............: 0.17.0
 Rope.............: 0.17.0
 Autopep8.........: 1.5.2
 Yapf.............: 0.30.0
 Black............: 19.10b0
Syntax checker....: flake8 (/home/david/.local/bin/flake8)

asked May 22, 2020 at 13:49

david's user avatar

You should create in your home folder a .flake8rc file, and add some content to ignore that error — documented here and below is a small template:

[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,
    # E127: continuation line over-indented for visual indent
    E127

The full error code listing is here

answered May 24, 2020 at 6:53

Ian's user avatar

IanIan

1,29610 silver badges12 bronze badges

1

Понравилась статья? Поделить с друзьями:
  • Ошибка output speed sensor
  • Ошибка output path
  • Ошибка outlook это действие запрещено политикой организации
  • Ошибка outlook недействительный xml формат
  • Ошибка outlook невозможно открыть файл