问题
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