Ruff未捕获函数未定义参数:如何配置或用其他工具检测?
关于Ruff捕获函数未定义参数的疑问
我不确定捕获函数的未定义参数是否属于Ruff的职责范围,但想了解是否有工具可实现该检测,或是我遗漏了某些Ruff配置项来开启此功能?
代码示例
from typing import Optional def my_func(bar: int, baz: int, foo: Optional[int] = None) -> int: if foo: return foo + bar + baz else: return bar + baz my_func(foo=1, bar=2, baz=3) my_func(bar=2, baz=3) my_func(f=1, bar=2, baz=3) # 该行的未定义参数未被Ruff捕获
我的ruff.toml配置
select = [ "F", # Pyflakes规则 "W", # 警告规则 "E", # 错误规则 "I", # isort规则 "N", # PEP8命名规则 "ANN", # Flake8注解规则 "B", # Flake8 Bugbear规则 "RUF", # Ruff专属规则 "PT", # Flake8 Pytest风格规则 "D", ] include = ["*.py"] force-exclude = true fixable = ["ALL"] pydocstyle.convention = "numpy" exclude = [".mypy_cache", ".ruff_cache", ".venv", "__pypackages__"] ignore = [ "ANN101", # 忽略self缺失类型注解 "E501", # 行长度由black处理 "N812", # 忽略导入别名非小写 "ANN401", # 忽略typing Any "D1", # 忽略缺失文档字符串 ]
解答
Ruff本身支持该检测
你配置中已包含的F(Pyflakes规则)里,F821就是专门检测未定义名称的规则,其中就涵盖函数调用时传入的未定义关键字参数。如果当前没捕获到问题,大概率是Ruff版本过低,建议升级到0.1.0及以上版本;也可以尝试在select中显式添加F821,确保规则被启用。补充工具选项
- Mypy:静态类型检查器,能严格校验函数参数匹配,运行
mypy 你的脚本名.py即可检测出未定义参数问题。 - Pyright:微软开发的静态类型检查工具,检测速度快,同样能精准捕获这类参数错误。
- Mypy:静态类型检查器,能严格校验函数参数匹配,运行
内容的提问来源于Stack Exchange,提问作者tandem
相关产品推荐
相关产品推荐

