AI 生成代码的 4 个高危点:路径、删除、异常、循环(附修复代码)
引子
AI 写代码已经很快了,但快不等于能用。最近遇到一个典型问题:一个同步文件的脚本稳定运行了一年,某天工作目录被移动后直接报错「源目录不存在」。
排查后发现第一行是:
SRC = r"D:\work\some-project\data"
写死的绝对路径。目录一挪,脚本就找不到目标了。
这类问题在 AI 生成的代码里出现频率很高,因为它无法预知你以后会把项目放在哪。下面四条是我实际踩过的坑,附修复方式。
一、路径写死
问题:绝对路径依赖具体机器和目录结构,换环境即失效。
修复:
from pathlib import Path
BASE = Path(__file__).resolve().parent
SRC = BASE / "data"
OUT = BASE / "out"
用当前脚本的位置推导路径,脚本跟着项目走,移动到任何位置都不会失效。
顺带一个 Windows 细节:路径字符串含反斜杠时要么加 r 前缀,要么统一改用 pathlib,避免转义问题。
二、破坏性操作没有预览
问题:AI 很喜欢直接写整套删除 / 重建目录的逻辑。
import shutil
shutil.rmtree(OUT) # 直接执行,无法撤销
OUT.mkdir()
修复:给所有破坏性操作加 dry-run 开关,默认先打印。
def clean_dir(target, dry_run=True):
for p in target.rglob("*"):
if p.is_file():
if dry_run:
print("[dry-run] 将删除:", p)
else:
p.unlink()
原则:任何删除、覆盖、重建操作,先打印一遍让人确认。
三、异常被静默吞掉
问题:
try:
process()
except:
pass
静默失败比崩溃危险得多——崩溃时你知道出事了,静默时你以为它成功了。
修复:
import logging
try:
process()
except Exception as e:
logging.exception("处理失败: %s", e)
raise
至少记录日志,并明确决定是继续还是中断。
四、没有边界检查就循环
问题:一次性把大文件读进内存、几万行逐行写,小样本正常,真实数据就卡死或 OOM。
修复:改用只读模式 + 迭代器。
import openpyxl
wb = openpyxl.load_workbook("big.xlsx", read_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True):
handle(row)
wb.close()
检查点:
- 有没有分块处理?
- 有没有开只读模式?
- 内存峰值估算过吗?
总结
- 路径一律用
Path(__file__).parent推导,禁止写死绝对路径 - 删除 / 覆盖类操作必须带 dry-run,先打印再执行
- 异常必须记录并显式处理,禁止空
except - 大文件用只读 + 迭代,避免全量读入内存
- AI 负责写得快,review 的责任仍然在人——尤其是会动文件系统的那部分代码
文中这四条坑,是我在维护一个开源小工具(ExcelRouter,批量拆 Excel 的桌面程序,MIT)
的过程中实际踩出来的,代码可以直接翻:
文中提到的工具:ExcelRouter
把一个或一整批 Excel 按部门、区域、工号等字段拆成多个文件,完整保留复杂表头与格式, 可再按人二级拆分并打包 ZIP。Windows + 银河麒麟 / 统信 UOS,免费开源(MIT), 全程本机处理,不联网、不上传。
下载(国内 · Gitee) GitHub 源码 ⭐