How do I get pylint to recognize MySQLdb members?

南楼画角 提交于 2019-12-24 02:25:37

问题


import MySQLdb

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

getting this pylint warning Module 'MySQLdb' has no 'Error' member (no-member)


回答1:


The Best:

Using extension-pkg-whitelist option:

A comma-separated list of package or module names from where C extensions may be loaded. Extensions are loading into the active Python interpreter and may run arbitrary code

--extension-pkg-whitelist=_mysql

PyLint parses (by default) the source files, but in Python the shape of a module can change at runtime from the shape defined in the source file. This option tells PyLint to actually import the specified module, and use the runtime definition.

Note that since the MySQLdb package wraps a C extension, you have to pass the name of the C extension (_mysql) instead of the package name (MySQLdb). (source)


Not Bad:

Using unsafe-load-any-extension option

Allow loading of arbitrary C extensions. Extensions are imported into the active Python interpreter and may run arbitrary code.

--unsafe-load-any-extension=yes

You could use the unsafe-load-any-extension option, but that would load every available extension, with its' (potentially dangerous) initialization code. extension-pkg-whitelist is safer, because it only loads the specified modules.


The Worst:

Using disable option

# pylint: disable=no-member

It doesn't really solve the issue, but only makes PyLint silent.


Thanks to @PCManticore, the maintainer of PyLint. Here's the comment of the maintainer.

Thanks to @ZevSpitz, the contributor of the best answer and this not bad answer.




回答2:


It may help to use the --extension-pkg-whitelist option:

--extension-pkg-whitelist=_mysql

pylint parses (by default) the source files, but in Python the shape of a module can change at runtime from the shape defined in the source file. This option tells pylint to actually import the specified module, and use the runtime definition.

Note that since the MySQLdb package wraps a C extension, you have to pass the name of the C extension (_mysql) instead of the package name (MySQLdb). (source)

You could use the unsafe-load-any-extension option, but that would load every available extension, with its' (potentially dangerous) initialization code. extension-pkg-whitelist is safer, because it only loads the specified modules.



来源:https://stackoverflow.com/questions/43907094/how-do-i-get-pylint-to-recognize-mysqldb-members

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!