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

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",     # 忽略缺失文档字符串
]

解答

  1. Ruff本身支持该检测
    你配置中已包含的F(Pyflakes规则)里,F821就是专门检测未定义名称的规则,其中就涵盖函数调用时传入的未定义关键字参数。如果当前没捕获到问题,大概率是Ruff版本过低,建议升级到0.1.0及以上版本;也可以尝试在select中显式添加F821,确保规则被启用。

  2. 补充工具选项

    • Mypy:静态类型检查器,能严格校验函数参数匹配,运行mypy 你的脚本名.py即可检测出未定义参数问题。
    • Pyright:微软开发的静态类型检查工具,检测速度快,同样能精准捕获这类参数错误。

内容的提问来源于Stack Exchange,提问作者tandem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:33:30