2
import MySQLdb

try:
    dbcon = MySQLdb.connect(host=host_name, user=user_name,
                                     passwd=password, db=db_name)
except MySQLdb.Error:
    pass

获取此 pylint 警告模块“MySQLdb”没有“错误”成员(无成员)

4

2 回答 2

1

最好的:

使用extension-pkg-whitelist选项

可以从中加载 C 扩展的包或模块名称的逗号分隔列表。扩展正在加载到活动的 Python 解释器中,并且可以运行任意代码

--extension-pkg-whitelist=_mysql

PyLint解析(默认情况下)源文件,但在 Python 中,模块的形状可以在运行时从源文件中定义的形状改变。这个选项告诉PyLint实际导入指定的模块,并使用运行时定义。

请注意,由于MySQLdb包包装了 C 扩展,因此您必须传递 C 扩展的名称 ( _mysql) 而不是包名称 ( MySQLdb)。(来源


不错:

使用unsafe-load-any-extension选项

允许加载任意 C 扩展。扩展被导入到活动的 Python 解释器中,并且可以运行任意代码。

--unsafe-load-any-extension=yes

您可以使用该unsafe-load-any-extension选项,但这会加载每个可用的扩展,以及它的(潜在危险的)初始化代码。extension-pkg-whitelist更安全,因为它只加载指定的模块。


最差的:

使用disable选项

# pylint: disable=no-member

它并不能真正解决问题,而只会让PyLint保持沉默。


感谢PyLint的维护者 @PCManticore。是维护者的评论。

感谢@ZevSpitz ,最佳答案的贡献者和这个不错的答案。

于 2018-03-22T15:46:32.077 回答
0

使用该--extension-pkg-whitelist选项可能会有所帮助:

--extension-pkg-whitelist=_mysql

pylint 解析(默认情况下)源文件,但在 Python 中,模块的形状可以在运行时从源文件中定义的形状改变。此选项告诉 pylint 实际导入指定的模块,并使用运行时定义。

请注意,由于 MySQLdb 包包装了 C 扩展,因此您必须传递 C 扩展的名称 ( _mysql) 而不是包名称 ( MySQLdb)。(来源

您可以使用该unsafe-load-any-extension选项,但这会加载每个可用的扩展,以及它的(潜在危险的)初始化代码。extension-pkg-whitelist更安全,因为它只加载指定的模块。

于 2017-11-20T05:48:34.277 回答