自动导入不遵循PEP8规范

16
考虑以下代码:
from bs4 import BeautifulSoup


data = "<test>test text</test>"
soup = BeautifulSoup(data)
print(soup.find(text=re.compile(r'test$')))

它缺少一个import re行,如果没有它会出现NameError错误。

现在,我正在尝试使用PyCharm自动导入功能:聚焦于re并按下Alt+Enter,这将打开以下弹出窗口:

enter image description here

现在,如果我选择导入're'选项,Pycharm会将新的导入行插入到脚本顶部:
import re
from bs4 import BeautifulSoup


data = "<test>test text</test>"
soup = BeautifulSoup(data)
print(soup.find(text=re.compile(r'test$')))

看起来几乎没问题,只是它没有遵循 PEP8导入指南

导入应按以下顺序分组:

  • 标准库导入

  • 相关的第三方导入

  • 本地应用程序/库特定的导入

每个导入组之间应该有一个空白行。

换句话说,在两个导入之间缺少一个空白行:

import re

from bs4 import BeautifulSoup

问题是:是否可以让Pycharm遵循PEP8准则,在自动导入时在不同导入类型的行之间插入新行?
作为一种解决办法,我在那之后调用 Optimize Imports 来正确组织导入。

5
PyCharm声称遵循PEP8规范并带有自动导入功能,所以你可能需要提交一个Bug报告。 - Phillip
这更加复杂了,因为标准、相关和本地导入之间的区别不明确。PyCharm可以更智能,但在一般情况下,你不能权威地确定给定的 import foo 属于哪个组。 - Dima Tisnek
@qarma 这是一个很好的观点。不过,在这种情况下,PyCharm 通过“优化导入”功能很好地组织了导入。这涉及到自动导入的一些内容。谢谢。 - alecxe
1个回答

9
你不能这样做。原因是PyCharm不会告诉你,如果你这样做或者任何导入语句都违反了PEP8准则。一、你的PyCharm过时了(最新版本是4.0.2/4.2),或者二、你的PyCharm似乎有一个bug,因此需要提交bug报告。如果可以,尝试安全地重新下载PyCharm以尝试修复错误。如果这样做没有效果,请提交bug报告,或者养成在语句之间留出空白行的习惯。希望我的回答解决了您的问题!哦,无论您使用from、import还是两种类型的语句都无关紧要。

谢谢,已在Pycharm的问题跟踪器上提交了一个问题(https://youtrack.jetbrains.com/issue/PY-14765)。 - alecxe

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