当前位置: 首页 > 面试题库 >

pylint 1.4在所有C扩展上报告E1101(无成员)

艾学海
2023-03-14
问题内容

我们一直是的粉丝pylint。它的静态分析已成为我们所有python项目的重要组成部分,并节省了大量时间来寻找晦涩的bug。但是从1.3->
1.4升级后,几乎所有已编译的c扩展都会导致E1101(无成员)错误。

以前在pylint1.3之前完美运行的项目现在抱怨E1101几​​乎每个C扩展成员。我们被迫禁用E1101错误,但是,这从实质上不利于的使用pylint

例如,对lxml包的这种完全有效的使用

r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')

通过运行此命令pylint,它将报告:

$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E:  3, 6: Module 'lxml.etree' has no 'Element' member (no-member)

但这是完全有效的:

$ python valid.py
<Element mydoc at 7fddf67b1ba8>

这真的很奇怪。极少数C扩展似乎可以通过正常运行pylint,例如:

r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version

$ pylint -rn valid2.py
No config file found, using default configuration

我的问题是,还有其他人目睹过吗?如果是这样,您是否愿意分享您的解决方法/解决方案?

我们已经尝试过尝试创建插件来抑制这些警告(http://docs.pylint.org/plugins.html#enter-
plugin
),但是我们很难在文档的正面或反面-astroid基类是超级复杂的,已经违背了我们的尝试。

对于真实的奖励积分(和我们永恒的感激之情),我们很乐意了解的变化pylint。我们很乐意修复将满足的代码(或至少为C扩展作者发布最佳实践文档)pylint

平台详情

$ pylint --version
No config file found, using default configuration
pylint 1.4.0,
astroid 1.3.2, common 0.63.2
Python 2.7.5 (default, Jul  1 2013, 18:09:11)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

问题答案:

发布问题后不久,我找到了答案。实际上,更改是出于安全措施的目的。Pylint导入模块以有效地识别有效的方法和属性。决定导入不属于python
stdlib的c扩展会带来安全风险,并且可能会引入恶意代码。

这是在Astroid 1.3.1版本 https://mail.python.org/pipermail/code-
quality/2014-November/000394.html中完成的

只有来自受信任来源(标准库)的C扩展被加载到正在检查的Python流程中,才能根据实时模块​​构建AST。

如果要在导入非stdlib c扩展名的项目上使用pylint,则有四种解决方案。

1)使用--unsafe-load-any- extension=y命令行选项禁用安全性。该功能未记录,被归类为隐藏选项(https://mail.python.org/pipermail/code-
quality/2014-November/000439.html)。

2)使用pylint.rc设置禁用安全性unsafe-load-any- extensions=yes。建议在选项1上使用它,并在默认的pylint.rc文件(使用创建--generate-rcfile)中包含完整的文档。

3)pylint.rc使用extension-pkg-whitelist=选项在文件中具体列出您相信由pylint加载的程序包或模块名称。

4)创建一个插件来操纵AST(我不知道如何实现此功能-但在pylint邮件列表中定期进行讨论)。

我们选择了选项3。我们在项目pylint.rc文件中添加了以下行:

extension-pkg-whitelist=lxml


 类似资料:
  • 我目前正在使用Cucumber框架和Selenium Java。我希望将我的正常cucumber报告升级为扩展报告。尝试使用扩展报告3.0.2。我能够生成范围报告,但我不能将失败测试用例的截图嵌入到范围报告中。 请大家帮忙了解一下,是否有可能将失败案例的截图嵌入到Cucumber Selenium Java框架中。如果是,请帮助我在转发与此或代码相关的任何链接。

  • 当类与 TestNG 并行运行时,我们不会获得范围报告,但 TestNG 报告会更新。请找到我正在使用的示例代码和版本。如果我们只运行一个类(TestClass1.java),则将生成范围报告。 硒版本3.4.0 范围报告版本:3.0.6 扩展报告库.java 测试类1.java TestClass2.java testng.xml

  • 我在我的一个报告中使用多种字体,我导出为PDF,我正在使用IREPORT来设计我的报告。 和根包中字体文件夹中的字体文件。

  • 我正在尝试使用extent report构建selenium,但无法使用save screenshot函数,因为我无法引用ITestListener类中的WebDriver对象。下面是我的示例代码: 测试转轮。java: TestListener.java公共类TestListener实现ITestListener{ 问题: > 如何将WebDriver对象从TestRunner.java传递给T

  • 我在visual studio C #中使用selenium处理ExtentReports,我运行了案例测试,但是报告文件。我在解决方案资源管理器中创建的报表文件夹中没有生成html。不知道问题出在哪里,我改了报告文件的路径去查,还是不生成。以下是我的代码: 和extent-config.xml:

  • 上面的代码用于生成allure报告并运行测试,它运行并生成reports-allure-results中的一个文件夹,其中包含JSON文件。见下方截图