Continuation lines should not be indented at the same level as the next logical line. Instead, they should be indented to one more level so as to distinguish them from the next line.
Anti-pattern
In this example the second line is indented at the same level as the line below it. This makes it difficult to tell what is in the if
block and what is a part of the boolean expression.
if user is not None and user.is_admin or
user.name == 'Grant':
blah = 'yeahnah'
Best practice
if user is not None and user.is_admin or
user.name == 'Grant':
blah = 'yeahnah'
Additional links
- https://www.python.org/dev/peps/pep-0008/#indentation
I have some python code that I run through pylint
and that I decided to also run through pycodestyle
.
To avoid long lines in a with statement, I do the following:
with my_context_manager(
argument1,
argument2) as something:
rest_of_my_code
But pycodestyle
tells me that
E125 continuation line with same indent as next logical line
So I indent this further, as follows:
with my_context_manager(
argument1,
argument2) as something:
rest_of_my_code
But now pylint
tells me:
Wrong hanging indentation (remove 4 spaces).
Is there a better solution that would satisfy both code quality checkers?
Note 1
The following raises no complaints from either of the two style checkers provided that the lines are not too long (which unfortunately is not always the case):
with my_context_manager(argument1,
argument2) as something:
rest_of_my_code
Note 2
To answer comments, I tried the following:
with my_context_manager(
argument1,
argument2) as something:
rest_of_my_code
Strangely pycodestyle
still says E125 continuation line with same indent as next logical line
about the same line as previously (the one with argument2
).
E122
Опубликовано January 1, 0001
Continuation line missing indentation or outdented
A continuation line is not indented as far as it should be or is indented too far.
Anti-pattern
In this example the second line is missing indentation.
print("Python", (
"Rules"))
Best practice
print("Python", (
"Rules"))
E123
Опубликовано January 1, 0001
Closing bracket does not match indentation of opening bracket’s line
Closing brackets should match the same indentation level of the line that their opening bracket started on.
Anti-pattern
In this example the last line should be indented at the same level as the first line.
result = function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
Best practice
result = function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
E124
Опубликовано January 1, 0001
Closing bracket does not match visual indentation
Closing brackets should match the indentation of the opening bracket.
Anti-pattern
result = function_that_takes_arguments('a', 'b', 'c',
'd', 'e', 'f',
)
Best practice
result = function_that_takes_arguments('a', 'b', 'c',
'd', 'e', 'f',
)
E125
Опубликовано January 1, 0001
Continuation line with same indent as next logical line Continuation lines should not be indented at the same level as the next logical line. Instead, they should be indented to one more level so as to distinguish them from the next line.
Anti-pattern In this example the second line is indented at the same level as the line below it. This makes it difficult to tell what is in the if block and what is a part of the boolean expression.
[Далее]
E126
Опубликовано January 1, 0001
Continuation line over-indented for hanging indent
A continuation line is indented farther than it should be for a hanging indent.
Anti-pattern
print("Python", (
"Rules"))
Best practice
print("Python", (
"Rules"))
E127
Опубликовано January 1, 0001
Continuation line over-indented for visual indent
A continuation line is indented farther than it should be for a visual indent.
Anti-pattern
In this example, the string "World"
is indented two spaces farther than it should be.
print("Python", ("Hello",
"World"))
Best practice
print("Python", ("Hello",
"World"))
E128
Опубликовано January 1, 0001
Continuation line under-indented for visual indent
A continuation line is under-indented for a visual indentation.
Anti-pattern
In this example the string "World"
is under-indented by two spaces.
print("Python", ("Hello",
"World"))
Best practice
print("Python", ("Hello",
"World"))
E129
Опубликовано January 1, 0001
Visually indented line with same indent as next logical line A visual indented line has the same indentation as the next logical line. This can make it hard to read.
Anti-pattern In this example the second line is indented at the same level as the body of the if statement.
if (row < 0 or module_count <= row or col < 0 or module_count <= col): raise Exception(“%s,%s- %s” % (row, col, self.
[Далее]
E131
Опубликовано January 1, 0001
Continuation line unaligned for hanging indent
A continuation line is unaligned for hanging indent.
Anti-pattern
my_dict = {
"key": "value",
"long": "the quick brown fox jumps over the "
"lazy dog",
}
Best practice
my_dict = {
"key": "value",
"long": "the quick brown fox jumps over the "
"lazy dog",
}
E133
Опубликовано January 1, 0001
Closing bracket is missing indentation
A closing bracket is missing indentation. This error only occurs if the --hang-closing
flag is used, switching the default behavior of closing brackets so that they require hanging indents.
Anti-pattern
Note: This is not an anti-pattern by default. This only occurs if the --hang-closing
flag is used.
my_list = [
1, 2, 3,
4, 5, 6,
]
Best practice
my_list = [
1, 2, 3,
4, 5, 6,
]
Comments
florentx
added a commit
that referenced
this issue
Mar 21, 2013
openstack-gerrit
pushed a commit
to openstack/openstack
that referenced
this issue
Nov 26, 2013
Project: openstack/nova fa024289be4114f6b31078721e8608b801776da2 null Don't gate on E125 E125 overreaches on what pep8 specifies. See PyCQA/pycodestyle#126 In practice E125 can be a pain as compliance requires manual indenting if using emacs and refactoring tools don't always get it right. There's a bit of a discussion about it here (on a tempest changeset): https://review.openstack.org/#/c/36788/ Change-Id: Ic73ab3c4a47f33de9145e0c7db2d8674230c2fe0
openstack-gerrit
pushed a commit
to openstack/nova
that referenced
this issue
Nov 26, 2013
E125 overreaches on what pep8 specifies. See PyCQA/pycodestyle#126 In practice E125 can be a pain as compliance requires manual indenting if using emacs and refactoring tools don't always get it right. There's a bit of a discussion about it here (on a tempest changeset): https://review.openstack.org/#/c/36788/ Change-Id: Ic73ab3c4a47f33de9145e0c7db2d8674230c2fe0
n0ano
pushed a commit
to n0ano/gantt
that referenced
this issue
Dec 11, 2013
E125 overreaches on what pep8 specifies. See PyCQA/pycodestyle#126 In practice E125 can be a pain as compliance requires manual indenting if using emacs and refactoring tools don't always get it right. There's a bit of a discussion about it here (on a tempest changeset): https://review.openstack.org/#/c/36788/ Change-Id: Ic73ab3c4a47f33de9145e0c7db2d8674230c2fe0