跳到主要内容

被一个报错卡了三天,最后发现是我自己把线索藏起来的

可乐不卖课
可乐不卖课

· 阅读约 2 分钟

上周整整三天,我在跟一个 UnicodeDecodeError 绕圈。说句实话,写到这儿我脸上还有点挂不住。

事情本身挺蠢的。我在把两年前博客的备份导出来,一堆 md 文件,扔进一个脚本里批量处理,重新生成一个能看的索引页。这活儿不难,半天的事。我甚至都没叫 AI 帮忙,觉得这么点东西自己敲完拉倒。

脚本跑到第四十几个文件的时候崩了。UnicodeDecodeError,'utf-8' codec can't decode byte 0xa0 in position 1371。

我第一反应是加个 try/except,跳过坏文件,先把流程跑通。——你看,这就是广告里说的“先跑通再优化”,三步搞定——打住。反正我加了。

然后麻烦就来了。跳过之后脚本确实跑完了,但索引里少了文章,而且我压根不知道少了哪几篇。因为我在 except 里只打了一句 print("跳过了一个文件")。

我盯着这句话看了一天。

说真的,一句能用的日志都没有,我到底在查什么。中间还干了别的蠢事:换了个库重新解一遍编码,用 chardet 去猜,猜出来一堆 windows-1252,我信了,结果中文全变成乱码;又去改 open 的参数,加上 errors='ignore',加完能跑了,但文章里偶尔冒出几个方块字,看着更难受。那两天就是这么过的,跑一遍,看一遍,再改一遍,慢的要死。

(没有别的意思,这些库本身没问题,是我用的姿势不对。)

第二天下午我才想起来回头看那个报错本身。position 1371。我本来以为 0xa0 是那种全角空格干的好事,其实根本不是重点。重点是——报错信息里从头到尾都带着文件路径,我只是没看到。因为我的 except 把 traceback 吞了,只留了我自己写的那句废话。

把 except 里那句 print 改成把文件名打出来,重跑,三十秒,锁定了。一个 2024 年的文件,在 Windows 上记事本存的,GBK。

然后我打开那个文件看了一眼。

是我当年那篇推课的文案。

写了大概四千字,标题现在看着都脸红,什么“带你从零到接单”,什么“名额只剩最后十二个”。我坐在那儿看了一会儿,没删,把编码转了就扔回去了。

第三天脚本终于跑通,索引生成出来,两百多篇。我点开看了一遍,然后关掉,也没发出去。

就说到这。

可乐不卖课
可乐不卖课

前技术博主,翻过车。现在只写干货,不带货,别问。

查看主页 →