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()

检查点:

总结

  1. 路径一律用 Path(__file__).parent 推导,禁止写死绝对路径
  2. 删除 / 覆盖类操作必须带 dry-run,先打印再执行
  3. 异常必须记录并显式处理,禁止空 except
  4. 大文件用只读 + 迭代,避免全量读入内存
  5. AI 负责写得快,review 的责任仍然在人——尤其是会动文件系统的那部分代码

文中这四条坑,是我在维护一个开源小工具(ExcelRouter,批量拆 Excel 的桌面程序,MIT)

的过程中实际踩出来的,代码可以直接翻:

GitHub:https://github.com/MarsandSea/ExcelRouter

国内镜像:https://gitee.com/Marsandsea/Excelrouter

文中提到的工具:ExcelRouter

把一个或一整批 Excel 按部门、区域、工号等字段拆成多个文件,完整保留复杂表头与格式, 可再按人二级拆分并打包 ZIP。Windows + 银河麒麟 / 统信 UOS,免费开源(MIT), 全程本机处理,不联网、不上传。

下载(国内 · Gitee) GitHub 源码 ⭐