如何修复 E402 的问题?

21

我们正在尝试解决PEP8 E402的问题。

大多数情况下,我们的代码出现了故障:

import os
os.environ['LIB_CAN_THROW_ERROR_ON_IMPORT'] = 2
import lib
os.environ['LIB_CAN_THROW_ERROR_ON_IMPORT'] = 0 # back

-

if sys.version_info[0] > 2:
    import python3lib
else:
    import python2lib

-

try:
    import lib
except:
    print('lib is required')
    sys.exit(1)

如何解决这些违规问题?


7
# noqa: E402 是代码中的注释,用于告诉代码检查工具忽略掉特定行的错误提示。 - Klaus D.
1
我认为你的解决方案只适用于pycodestyle,而不适用于flake8,而且这仍然是一个被忽略的PEP8违规。就像在tox.ini中添加E402以适用于flake8一样,这并不是一个解决方案,只是一个权宜之计。 - aleskva
2
PEP 8最常见的违规是"愚蠢的一致性是小心灵的巫妖"。 - Klaus D.
然后,您应该至少对您的问题进行一些解释:您正在做什么,确切的问题是什么,使用什么工具以及如何使用它们,它们的输出是什么,您已经尝试过什么来解决它,以及为什么它没有起作用... - Klaus D.
1
@aleskva 请不要对试图帮助你的人粗鲁无礼 :( - Adam Barnes
显示剩余2条评论
1个回答

32

PEP8中规定的指南只是指导方针。当它们有意义时,它们是要遵循的一套规则。

E402指的是只能在文件顶部进行导入。这是为了防止以下情况发生:

import pygame

# 800 lines of pygame stuff
...

import math
# 10 lines of math stuff
...

# Another 800 pygame lines
在上面的例子中,很难知道math已被导入。如果你需要在文件末尾再次使用math而不受E402的干扰,你可能会再次import math,这是无害但有些马虎。
在您的情况下,您并没有偷懒。您正在明确设置某些东西以便导入另一个库,或者向用户提供更好的错误消息。如评论所建议的那样,在这些行的末尾加上# noqa: E402,告诉您的代码检查器忽略这些警告。您可以将其视为告诉代码检查器“我知道自己在做什么,请离我远点。”

2
如果你想解释为什么在我发布回答多年后给它点了踩,那或许我可以改进它。 - Adam Barnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接