AI 生成的 Python 代码怎么检查?用 Ruff 找出静态问题

用 Ruff 检查 AI 生成的 Python 草稿,定位 F401、F821 与导入排序问题;保存报告、人工修复后复扫,并用功能样例区分静态通过与业务正确。

AI 生成的 Python 代码先用 Ruff 做一轮静态检查,能尽早发现未使用的导入、未定义的变量和不一致的导入顺序。检查时不需要执行这段陌生代码。下面用一个“计算价格合计”的教学样例,走完安装、生成报告、修复和复查;最后再用输入输出核对功能。

准备环境:把检查器装进独立目录

需要已安装的 Python。本例实际验证环境是 Windows、Python 3.13.14、Ruff 0.16.9;配置以 Python 3.11 为目标语法版本。下面是 Windows PowerShell 命令,在你新建的练习目录运行,避免覆盖项目现有配置:

AI 生成的 Python 代码怎么检查?用 Ruff 找出静态问题

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install ruff==0.16.9
.\.venv\Scripts\python.exe -m ruff --version

macOS 或 Linux 把可执行文件路径改为 .venv/bin/python。真实项目已有 Ruff 时,优先使用项目锁定版本和配置;本文固定版本用于复现样例。Ruff 官方教程分别介绍了检查器与格式化器,它们是两个动作。

固定规则,再检查 AI 给出的草稿

新建 pyproject.toml,内容如下。明确列规则,可以避免换机器后因默认规则变化而产生不一致结果。

[tool.ruff]
target-version = "py311"
line-length = 88

[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "I"]

F 包含变量与导入相关检查,I 检查导入排序。此配置只是本练习的范围;团队项目的规则应遵循已有规范。配置查找和覆盖方式见官方配置说明。

把下面代码保存为 generated_bad.py。这是人为设计的错误样例,用来模拟 AI 草稿中常见的变量名错误,不是真实项目代码:

import os
import json


def total_price(prices):
    return sum(price)

先生成便于阅读的报告,再保存机器可读报告:

.\.venv\Scripts\python.exe -m ruff check generated_bad.py
.\.venv\Scripts\python.exe -m ruff check generated_bad.py --output-format json > ruff-before.json

Windows PowerShell 5.1 的重定向文件可能使用 UTF-16;要让后续程序按 UTF-8 读取,可用 PowerShell 7,或显式指定读取编码。终端里检查后立即查看 $LASTEXITCODE;本样例的 Ruff 检查退出码为 1,表示有检查问题。输出文件存在本身不能说明通过。

本样例实际检出项 位置与含义 处理方式
I001 第 1 行开始的导入块顺序不符合规则 先判断导入是否需要,避免只排序无用代码
F401,两条 第 1、2 行的 os、json 未使用 删除本函数不需要的导入
F821 第 6 行引用了未定义的 price 核对原需求,确认应当汇总参数 prices

规则含义可分别核对F401 未使用导入和F821 未定义名称。这些定位比直接再问一次“AI 帮我优化”更具体:把报错编号、代码行和预期行为给出,才能检查修复是否改变了需求。

人工确认修复,再复扫和核对功能

保存修复稿为 generated_fixed.py:

def total_price(prices):
    return sum(prices)

本例需求约定输入是一组数字,空列表合计为 0。Ruff 能发现 price 没有定义,但无法替你决定空列表、折扣、币种、税费该怎样处理。

.\.venv\Scripts\python.exe -m ruff check generated_fixed.py
.\.venv\Scripts\python.exe -m ruff format --check generated_fixed.py
.\.venv\Scripts\python.exe -c "from generated_fixed import total_price; assert total_price([10, 20.5]) == 30.5; assert total_price([]) == 0; print('功能样例通过')"

修复稿在上述验证环境中得到 All checks passed!;两个函数样例也实际通过。读者复现时,先确认检查退出码为 0,再确认正常输入和边界输入满足自己的需求。这里的小数样例只展示函数行为;金额结算需按项目约定使用 Decimal 或最小货币单位,不能把浮点示例直接用于账务。

如果想自动修复,先提交或备份工作文件,再执行 ruff check --fix,随后逐项查看差异。不要在不了解影响时启用不安全修复;也不要把所有报错统一加 noqa 隐藏。F821 这种业务含义相关的修复,通常仍需要人判断。

哪些问题仍要另外验证?

静态检查通过只说明选定规则没有继续报错,不能证明函数算对、接口存在、第三方依赖可用或权限校验完整。Ruff 不会把每个外部 API 请求实际发出去,也不能判断这个价格函数是否符合你的业务。下一步是运行项目现有测试,尤其覆盖空输入、错误类型、异常分支和修改涉及的旧功能。

如果报出不存在的规则,先核对 ruff --version 与项目锁定版本;如果预期的问题没有检出,检查运行目录、被排除文件和生效配置。语法解析失败应先修复语法,不能把它当作“没有问题”。关于如何选择功能测试任务,可继续阅读AI 编程代码生成与调试能力评估方法,再把这轮 Ruff 报告加入每次代码修改的验证记录。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30536.html

赞 (0)
AI小管家的头像AI小管家
Dify 写作工作流怎么搭建?用资料、大纲和审稿生成可核对初稿
上一篇 11小时前
豆包 AI 和 Qwen 怎么选?用同一任务测试中文办公与代码辅助
下一篇 11小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部