如何让 pylint 识别 MySQLdb 成员?

Posted

技术标签:

【中文标题】如何让 pylint 识别 MySQLdb 成员?【英文标题】:How do I get pylint to recognize MySQLdb members? 【发布时间】:2017-10-09 23:09:47 【问题描述】:
import mysqldb

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

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

【问题讨论】:

【参考方案1】:

最好的:

使用extension-pkg-whitelist option:

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

--extension-pkg-whitelist=_mysql

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

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


还不错:

使用unsafe-load-any-extension option

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

--unsafe-load-any-extension=yes

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


最坏的情况:

使用disable option

# pylint: disable=no-member

这并不能真正解决问题,只会让PyLint 沉默。


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

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

【讨论】:

我建议稍微澄清一下:因为它需要实际的 C 扩展,但需要 Python 包装器。 -- 它需要 C 扩展还是 Python 包装器? 【参考方案2】:

使用--extension-pkg-whitelist option可能会有所帮助:

--extension-pkg-whitelist=_mysql

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

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

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

【讨论】:

正如我在回答中提到的,应该是--extension-pkg-whitelist=_mysql,而不是MySQLdb @soundlake 目前我的回答没有为您的回答添加任何信息;但我觉得它更好地呈现,并且没有明确的编辑历史。如果您可以接受此答案,建议您将其复制并粘贴到您的答案中,我将删除我的答案。 感谢您的友好建议。为了存档,我把你的答案复制到我的里面,并添加了一些装饰。 @soundlake 您无需担心存档;问答的整个历史is stored in SO。此外,虽然非常感谢感谢和信任,但它们在 SO 上被认为是不合适的——应该对有价值的问题和答案进行投票。也许在 cmets 中,或者最多在 ` 标签中的一个注释。

以上是关于如何让 pylint 识别 MySQLdb 成员?的主要内容,如果未能解决你的问题,请参考以下文章

VSCode PyLint 未检测到我的 Python DTO 类成员

如何让 Mypy 在 Callable 中识别类的协议成员资格?

如何让我的 discord.py 机器人识别它正在被 ping

VS Code报错Module 'xx' has no 'xx' member pylint(no-member)解决办法

如何使用 Pylint 来规范 Python 代码风格

如何使用 Pylint 来规范 Python 代码风格