Python 更好地替代flake8';s";E902令牌错误:多行语句中的EOF“;

Python 更好地替代flake8';s";E902令牌错误:多行语句中的EOF“;,python,flake8,Python,Flake8,我确实理解E902的错误,但是我确实认为它有点“混乱”。这有两个原因: 我觉得应该是F902(失败而不是错误)。毕竟,正如我在Flake的世界中所看到的,错误是样式指南中错误的东西(例如,一行有3个换行符),而失败是无法使程序运行的东西(例如,在声明之前引用变量)。换句话说,当我在IDE中保存一个python文件时,我应该乐于忽略任何错误(只要我只是在黑客攻击),但希望任何明显的错误都能得到提醒(而不仅仅是我不关心)。显然,编写无效的python甚至比在声明变量之前使用变量更糟糕(在某些情况下

我确实理解E902的错误,但是我确实认为它有点“混乱”。这有两个原因:

  • 我觉得应该是F902(失败而不是错误)。毕竟,正如我在Flake的世界中所看到的,错误是样式指南中错误的东西(例如,一行有3个换行符),而失败是无法使程序运行的东西(例如,在声明之前引用变量)。换句话说,当我在IDE中保存一个python文件时,我应该乐于忽略任何错误(只要我只是在黑客攻击),但希望任何明显的错误都能得到提醒(而不仅仅是我不关心)。显然,编写无效的python甚至比在声明变量之前使用变量更糟糕(在某些情况下,变量实际上会运行)
  • 更重要的是,我觉得这个错误总是指向第1行字符1是毫无帮助的。这意味着我要开始查找代码(有时是1000行长的文件)中忘记关闭括号的确切位置,或者运行另一个工具(例如仅对文件运行
    python
    )来查找确切的行。此外,这意味着我的编辑器(VIM)不会显示我正在处理的行的任何错误;我只会看到错误,如果我一直向上滚动
我想我的问题有三个:

  • 为什么E902是一个错误而不是一个失败(不是非常重要,但如果它背后有一个基本原理,我很高兴了解它)
  • E902错误总是在第1行第1列,这是有充分的理由的吗?或者这只是因为没有花费足够的资源使它指向代码中的正确位置
  • 最重要的是:有没有一种公认的/更好的方法?也许是一个围绕flake8的包装器,在E902出错的情况下,它使用其他方法来找到更准确的位置(请注意,pyflakes是flake8的一部分,它确实找到了正确的行;运行
    python
    可能不是一个好主意,因为似乎没有办法告诉python只解析文件而不实际运行它)。我相信我自己可以创建这样一个包装器,但如果其他/更聪明的人已经创建了一个,我更愿意重用他们的工作
为完整起见,以下代码显示了该问题:

def x():
    pass


x(
a = 1
b = 2

pyflakes和python在第7行中都显示了错误(至少非常接近错误发生的位置),而flake8只会在1:1上显示错误,回答所有三个问题(通常单独的问题应该是单独的问题,所以…):

  • E/F/W代码并不意味着错误/故障/警告——前缀是一致的。F代码来自pyflakes,E和W代码来自pycodestyle(尽管仍有两个从pycodestyle继承下来的特殊E代码——E902和E999用于OSError和SyntaxeError——我很想改变这一点,但使用flake8的人数太多,使得突破性的改变变得棘手)

  • 这是第1列第1行,因为此错误来自标记器,它在文件的最后一行报告超出范围的错误。标记器在给出精确的错误位置方面不是很好

  • 这被认为是一个bug,但是还没有人自愿去解决它,如果我读对了,它应该是一个两行的修复程序——你可以在这里阅读更多关于这个bug的内容:



  • 免责声明:我是目前的flake8维护人员,负责回答所有三个问题(通常单独的问题应该是单独的问题,但是…):

  • E/F/W代码并不意味着错误/故障/警告——前缀是一致的。F代码来自pyflakes,E和W代码来自pycodestyle(尽管仍有两个从pycodestyle继承下来的特殊E代码——E902和E999用于OSError和SyntaxeError——我很想改变这一点,但使用flake8的人数太多,使得突破性的改变变得棘手)

  • 这是第1列第1行,因为此错误来自标记器,它在文件的最后一行报告超出范围的错误。标记器在给出精确的错误位置方面不是很好

  • 这被认为是一个bug,但是还没有人自愿去解决它,如果我读对了,它应该是一个两行的修复程序——你可以在这里阅读更多关于这个bug的内容:



  • 免责声明:我是当前的flake8维护者

    在我看来,这个反馈更适合作为flake8的GitHub上的一个问题?你说得很对。我可能应该在那里发布前两个问题(应该这样做,也会这样做)。第三个(询问其他工具/包装脚本等)可能属于这里;我确实潜得更深了一点,现在我自己回答了问题1和问题2(令人惊讶的是,我以前没有看到这些答案;可能是因为我在github上搜索了信息,尽管问题在gitlab上,但在我看来,这个反馈更适合作为flake8的github上的问题?你说得很好。我可能应该在那里发布前两个问题/问题(应该和将要这样做)。第三个问题(询问其他工具/包装脚本等)可能属于这里。谢谢@CoryKramer;我确实深入了一点,现在自己回答了问题1和问题2(令人惊讶的是,我以前没有看到这些答案;可能是因为我搜索了github以获取信息,尽管这些问题在gitlab上