How do I get pylint to recognize MySQLdb members?

2019-07-18 09:39发布

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)

2条回答
做个烂人
2楼-- · 2019-07-18 10:02

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.

查看更多
再贱就再见
3楼-- · 2019-07-18 10:11

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.

查看更多
登录 后发表回答