Pylint误报必填关键字参数缺失?合法语法触发E1125问题
问题:通过**kwargs传递强制关键字参数时Pylint误报?
版本信息
(.venv-3.12) % ~/.venv-3.12/bin/pylint --version pylint 3.3.1 astroid 3.3.5 Python 3.12.3 (main, Apr 9 2024, 08:09:14) [Clang 15.0.0 (clang-1500.3.9.4)]
示例代码
"""kwargs module""" def fun(a,b,*,c,d,**kwargs): """function with kwargs""" return a + b + c + d + kwargs['e'] + kwargs['f'] someargs = {} someargs['c'] = 3 someargs['d'] = 4 someargs['e'] = 5 someargs['f'] = 6 someargs['g'] = 7 rval = fun(1,2,**someargs) print(rval)
代码运行结果
(.venv-3.12) % ~/.venv-3.12/bin/python3 kwargs.py 21
Pylint报错信息
(.venv-3.12) % ~/.venv-3.12/bin/pylint kwargs.py ************* Module kwargs kwargs.py:14:7: E1125: Missing mandatory keyword argument 'c' in function call (missing-kwoa) kwargs.py:14:7: E1125: Missing mandatory keyword argument 'd' in function call (missing-kwoa) ------------------------------------------------------------------ Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
解答
语法合法性:你的代码完全符合Python语法规范,是合法的。Python支持通过
**解包字典的方式,将字典内的键值对作为关键字参数传递给函数,只要字典包含函数要求的强制关键字参数,就能正常执行。Pylint报错原因:这是Pylint静态分析的局限性导致的误报。Pylint做检查时是静态扫描,无法追踪到
someargs字典内部实际包含了c和d这两个必填参数,它仅能看到函数调用时没有显式写出c和d,因此触发了missing-kwoa错误。
如果要规避这个误报,有两种常见方式:
- 若场景允许,显式在函数调用时写出
c和d参数 - 在代码行添加注释
# pylint: disable=missing-kwoa临时忽略该报错,或者在Pylint配置文件中全局禁用E1125规则
内容的提问来源于stack exchange,提问作者khp
相关产品推荐
相关产品推荐

