Python fdopen 的关闭责任:文件对象已经关闭,为什么原描述符还能继续写 一个辅助函数接收已经打开的文件描述符,为了方便写入,把它包装成文件对象。离开with以后,调用者有时还能写,有时却收到Bad file descriptor。关键不在with是否执行,而在包装对象是否同时拥有关闭底层... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python BytesIO 导出缓冲视图:内容能改,为什么追加和关闭却被拒绝 一个打包函数把 BytesIO 交给后续处理器,希望对方直接检查内容,省去一次中间复制。处理器调用 getbuffer 后保留了视图,打包函数接着追加尾标记,却收到 BufferError;退出时关闭流也失败。问题出... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Node.js readFile 读文件描述符:文件没变,为什么第二次只读到空串 同一个小文件先检查两字节的头部,再把文件描述符交给 readFile,希望得到完整内容,结果开头两字节不见了。再次调用又只返回空串。文件没有被删改,变化的是已打开文件的读取位置:接口会接着当前位置读下去。传路径和传描... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python sqlite3 的连接上下文:with 已经结束,为什么数据库连接仍然能查询 把 sqlite3.connect 放进 with,导入结束后继续执行查询居然仍然成功。很多人从文件对象的习惯推断,离开 with 就一定关闭了资源,但连接对象的上下文协议承担的是事务处理,不负责关闭连接。它是否提交... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python ExitStack 动态清理:第三个资源打开失败,前两个怎样按倒序释放 资源数量运行时才知道一个任务要按清单打开多个输入文件,再创建输出通道。清单长短不固定,第三次获取还可能失败。如果先把所有资源放进列表,最后才安排关闭,中途异常可能让前面已经成功打开的资源无人管理。ExitStack ... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python contextmanager:资源清理完成了,异常为什么还应该传出去 把资源状态和业务结果分开验收导入报表时,第二行金额格式错误,读取流已经关闭,任务是否可以显示成功?当然不能。资源是否释放与数据是否处理完成,是两项独立结果。把关闭动作封装成上下文管理器后,最容易漏掉的是后半项:为了记... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 临时文件生命周期:关闭、再次打开与自动清理分开安排 临时文件最麻烦的问题往往出现在成功路径之外:处理到一半报错,目录留在磁盘;准备交给另一个程序读取,文件却已经删除。解决办法是把“资源活多久”和“处理做什么”分开设计。本文在 Python 3.12.14 上执行,第二... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读