You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载自定义Pylint插件触发KeyError: None错误该如何解决

报错根因

这个KeyError: None是插件加载失败触发的衍生错误:pylint检测到插件加载异常后要上报bad-plugin-value错误,此时还没开始扫描业务代码,模块名变量为None,触发统计逻辑的键缺失报错。你需要修正插件本身的代码错误和加载方式,具体修改如下:

1. 修复__init__.py代码

原有问题:shebang位置错误、代码存在多余前导缩进、导入类名错误。
修正后代码:

#!/usr/bin/env python
"""
Register all plugin
"""
from .check_os_walk import CheckOswalk

def register(linter):
    """
    entry point for pylint
    :param linter: linter obj
    :return:
    """
    linter.register_checker(CheckOswalk(linter))

2. 修复check_os_walk.py代码

原有问题:消息字典属性名错误(应该是msgs不是msg)、检查逻辑错误(所有标识符都会触发告警,没有判断是否为os.walk)。
修正后代码:

#!/usr/bin/env python
import astroid
from pylint.checkers import BaseChecker
from pylint.interfaces import IAstroidChecker


class CheckOswalk(BaseChecker):
    __implements__ = (IAstroidChecker,)

    name = 'no-need-to-call-os-walk'

    msgs = {
        'R1000': (
            'please avoid using os.walk',
            'os.walk_used',
            'os.walk use unless it is needed and prefer os.scandir in python3'
        )
    }

    def visit_attribute(self, node):
        # 仅匹配os.walk的属性访问场景
        if node.attrname == 'walk' and isinstance(node.expr, astroid.Name) and node.expr.name == 'os':
            self.add_message('os.walk_used', node=node)

3. 修正插件加载命令

--load-plugins参数接收的是Python模块名,不是文件路径,你需要先把插件所在目录加入PYTHONPATH后再加载。
如果你的插件文件直接放在当前目录下,执行命令改为:

export PYTHONPATH=$PWD
venv/bin/pylint --load-plugins=__init__ dir_traversal.py

如果你的插件放在独立的目录(比如pylint_custom_plugin)下,执行命令改为:

export PYTHONPATH=$PWD
venv/bin/pylint --load-plugins=pylint_custom_plugin dir_traversal.py

修改完成后执行命令即可正常扫描,触发os.walk_used告警。

内容的提问来源于stack exchange,提问作者user765443

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:45:00