Python 原子替换文件:os.replace、flush 与 fsync 的正确顺序 更新配置时直接用写入模式打开原文件,会先截断旧内容。程序若在写入中途退出,读取方可能拿到空文件或半份配置。更稳妥的流程是先写同目录临时文件,完成刷新与同步,再用 os.replace 切换文件名。本文面向 Linux... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python TaskGroup 失败与取消:让并发任务结束得可验证 一项请求同时启动几项相关工作时,最难处理的往往不是全部成功,而是其中一项失败后,其余任务还在运行。Python 3.11 引入的 TaskGroup 把这些任务收进同一个异步上下文:退出时等待组内任务结束,并把失败带... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
SQLite 外键排查:建了 REFERENCES,为什么孤儿记录仍能写入 表结构写了 REFERENCES,却发现子表指向不存在的父记录,问题可能在连接初始化。SQLite 的外键检查需要受库构建支持,并在连接上启用;不能把建表语句或某个管理工具中的开关当作所有应用连接的保证。本文用 Py... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python subprocess 实战:把参数、退出码和超时分开处理 自动化脚本调用外部程序时,常把一串命令拼好就运行,再凭终端有没有文字判断成功。这样容易混淆参数解析、程序失败和执行超时。本文使用 Python 3.9 及以上标准库,通过当前解释器启动三个很小的子进程;全部文件位于临... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python Decimal 舍入:把精度、位数和规则分开 报表导出或测量结果保留两位小数,看起来只需要一个格式化操作。真正容易出错的是:输入是否已损失精度,中间计算保留多少有效数字,最终采用什么舍入规则。本文以 Python 3.14 官方文档核验语义,全部代码实际运行环境... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python pathlib 路径边界:解析后的文件是否真的位于根目录内 下载接口接收一个相对文件名,再与资料目录拼接,看起来很简单。但路径中的父目录、绝对路径和符号链接,都可能让最终目标偏离预期。本文参照 Python 3.14 文档,示例使用 Python 3.9 起已有的接口,并限定... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 日志重复输出:沿 logger 层级找到多余的 handler 一条 logger.info 在终端出现两次,未必是函数执行了两次。Python 日志记录可能先由当前 logger 的 handler 输出,再传播到父级 handler,于是同一条记录被写到相同目的地多次。本文依... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python zoneinfo:正确处理夏令时重复时间与不存在时间 “凌晨一点半”不是永远唯一的时刻。某些地区秋季调回时钟时会重复一段本地时间,春季前拨时又会跳过一段时间。仅保存日期和小时分钟,可能无法还原用户的真实选择。本文使用 Python 3.14 标准库说明;zoneinfo... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python 读写 CSV:编码、换行和字段边界要分别处理 CSV 看起来像“逗号分隔的文本”,但直接 split 逗号很快会遇到带引号的地址、跨行备注和编码问题。可靠处理需要分清三层:字节用什么编码解码,CSV 方言怎样描述字段,业务如何解释字段值。本文基于 Python ... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
Python 虚拟环境排错:先确认解释器,再检查依赖 pip 提示安装成功,程序却说找不到模块,很多时候不是包消失了,而是安装和运行使用了不同的 Python。虚拟环境的价值是为项目建立独立依赖目录,但它不会替你决定 IDE、终端、计划任务到底调用哪个解释器。本文先用 ... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读