Does pep8 fail to recognize `# noqa` in some instances?

coding-style, pep8, python

Solution

The `pep8` script only lets you disable specific error codes with a `# noqa` comment.

See the Error Codes table; only error codes marked with `(^)` can be silenced this way. E211 and E221 are not among them (none of the E2* codes are):

`(^)` These checks can be disabled at the line level using the `# noqa` special comment. This possibility should be reserved for special cases.

Personally, I prefer using the `flake8` tool, which combines `pep8` with PyFlakes, and lets you use the `# noqa` marker far more liberally.

Problem

For readability reasons, I prefer to align some types of statements, such as in the following case (this involves some PyParsing code, but that detail doesn't matter): ``` _otherwise_stmt = _OTHERWISE ('otherwise statement') _else_stmt = _ELSE ('else statement') _end_stmt = _END ('end statement') ``` For this, `pep8` complains about E221 ("multiple spaces before operator") and E211 ("whitespace before '('"). If I put `# noqa` at the end of every one of the lines, `pep8` still complains about these lines. However, for other constructs elsewhere in my file, the `# noqa` works as expected. I'm confused about why `# noqa` does not make `pep8` work as expected for these particular constructs. Is this a bug in the `pep8` program, or am I doing something else wrong here?

Original source