如何让 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)解决办法