← 回到全部文章

Python 踩坑日记:那些 AI 没告诉我的事

AI 写的 Python 代码能跑,但有些坑,只有自己踩过才会懂。这是我这几个月攒下的真实记录。

写的时候的心情:一边骂一边学

Python后端踩坑

我学 Python 的方式很”现代”:不啃教程,直接让 AI 帮我写小工具。爬虫、数据处理、自动化脚本,想要什么就让它写什么。

代码都能跑。但跑得起来真的懂之间,隔着一整个我自己挖的坑群。

坑一:缩进,那个要命的缩进

AI 写的代码缩进永远是对的。但我自己手动改的时候——

def get_cats():
    cats = []
    for i in range(10):
        cats.append(f"cat_{i}")
     return cats   # ← 看出来了吗?前面多了一个空格

报错信息是 IndentationError: unindent does not match any outer indentation level。第一次看到的时候我盯着这行字看了五分钟,完全不知道它在说什么。

后来才明白:Python 用缩进来表示代码块,多一个空格少一个空格都不行。 而 AI 永远不会犯这种错,所以它从来没”告诉”过我这件事有多重要。

这个坑让我学会了:自己手敲一遍 AI 给的代码,哪怕只是抄,也比复制粘贴学到的多十倍。

坑二:可变默认参数

这个是经典坑,但我还是踩了。

def add_cat(cat, box=[]):   # ← 这个 [] 是个陷阱
    box.append(cat)
    return box

print(add_cat("橘猫"))   # ['橘猫']
print(add_cat("黑猫"))   # ['橘猫', '黑猫']  ← ???

我预期第二次调用应该是 ['黑猫'],结果第一次的猫还在盒子里。我以为 Python 坏了。

AI 解释给我听:函数的默认参数只在定义时计算一次。所以那个 [] 是所有调用共享的同一个列表。

正确写法:

def add_cat(cat, box=None):
    if box is None:
        box = []
    box.append(cat)
    return box

这种坑,AI 写代码时不会犯(它知道),但如果不踩一次、不理解为什么,我永远学不会自己判断

坑三:环境,那个看不见的战场

有段时间我装一个库死活装不上,报错信息一大串。AI 让我”检查 Python 环境”,我不懂什么意思。

折腾了两天才搞明白:我电脑上装了三个 Python(系统自带的、Anaconda 的、某个软件捆绑的),pip install 装到了 A,但我运行时用的是 B,当然找不到。

那次之后我才真正理解什么叫虚拟环境。现在每次开新项目第一件事:

python -m venv .venv
.venv\Scripts\activate   # Windows

不是为了显得专业,是为了不让自己再被这种破事折磨两天

坑四:==is

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)   # True   值相等
print(a is b)   # False  但不是同一个对象

这个还好理解。但有个更阴的:

x = 256
y = 256
print(x is y)   # True

x = 257
y = 257
print(x is y)   # False ???

Python 会缓存 -5256 的小整数,所以这个范围内的 is 恰好为 True,超出去就 False。这种”恰好能跑”的坑最坑,因为你写的时候以为对的,某天数字一大就炸了。

教训:比较值用 ==,只有当你真的想确认”是不是同一个对象”时才用 is

AI 是好老师,但不是全能老师

我现在依然重度依赖 AI 写代码。但我对它的定位变了:

  • 它是我的打字员——把我脑子里的逻辑快速变成代码
  • 它是我的词典——我遇到不懂的概念,问它
  • 但它不是我的经验——经验只能靠我自己踩坑攒出来

每次踩坑,我都会把坑记下来(就像这篇)。因为我知道,下一次我遇到类似的场景,AI 不一定会主动提醒我。它太”正确”了,反而会让我以为没有坑。

而真正的学习,恰恰发生在”哦原来这里有坑”的那个瞬间。


给同样在用 AI 学编程的新人一句话:让 AI 替你写,但不要让它替你踩坑。 那些坑,是学费,也是你真正变成”懂一点”的人的过程。

🐾

写到这里啦。如果你也在学编程、也在用 AI 折腾自己的小东西, 我们大概是同类

— turgidcat, 2026年6月8日

再读两篇?