# 踩了 getsource 的坑…… (July 15, 2025)

整整半天 一直在 debug，一层一层往下排查…… 最后发现问题就在于 `getsource()` 在 Windows 上有可能**即使文件已经改变了但是仍然获得旧的结果**……

排查了很久很久，最后发现在写入文件的时候，可能 [mtime](https://docs.python.org/3/library/stat.html#stat.ST_MTIME) 的元数据不会那么快更新，或者粒度比较粗，导致修改完代码文件立刻调用 `getsource` 并不会触发 `linecache` 重新读取代码文件。也可能是 `getsource` 的问题

> 其实并没有把原因完全搞清楚，但已经完全不想管了，毕竟多一事不如少一事，而且人就是这么不求甚解，一旦发现解决问题的办法了，就可能不再追求搞懂它最深层的原因了 唉
>
> 不过一方面也是因为 python 标准库完全没有类型标注，代码写的比第三方库烂的多……看了污染眼睛
>



而且这个 bug 只在 Windows 上出现，而且在 GitHub Actions 上基本上每次都能复现，而我在本机上虽然也是 Windows 但基本上每次都不能复现，所以我 debug 的过程就很恶心：必须不停把更多的东西 print 出来，然后 push 到 GitHub 触发 Action……



#### 解决方案
```python
from linecache import cache

if filepath in cache:
    del cache[filepath]
```



相关的 commit 历史，简直是 debug 血泪史：[Commits · promplate/pyth-on-line](https://github.com/promplate/pyth-on-line/commits/76bf8b4bda298fbd008327fa18fd37d2d6ad8418/)