Python sqlite3 复用游标:外层查询还有两行,为什么内层查一次就读不到了 循环读取任务清单时,内部再查一次数量,处理完第一条以后循环就结束了。表里明明还有数据,单独执行同一查询也能返回全部记录。这时值得检查是否把同一个 Cursor 同时用于外层遍历和内层查询:游标管理当前执行及取行状态,... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python sqlite3 的连接上下文:with 已经结束,为什么数据库连接仍然能查询 把 sqlite3.connect 放进 with,导入结束后继续执行查询居然仍然成功。很多人从文件对象的习惯推断,离开 with 就一定关闭了资源,但连接对象的上下文协议承担的是事务处理,不负责关闭连接。它是否提交... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python dedent 的共同缩进:看起来对齐的制表符和空格,为什么一格也没有删 把多行提示文字放进函数里的三引号字符串,前面为了源码整齐加了缩进。调用 textwrap.dedent 后,大部分模板能顶格,另一个模板却原样保留了缩进。编辑器里各行看起来齐平,不代表开头字符相同:一行用制表符,一行... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python logging 的 stacklevel:日志已经输出,为什么每条都指向同一个包装函数 项目把统一日志格式放进一个辅助函数,业务代码调用它时文字都正确,文件名和行号却总是指向那几行公共代码。排查导入失败时,每个入口看起来都像来自同一个地方。因为日志默认记录的是实际调用日志接口的位置;包装层已经变成这个位... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python bisect 的 key 参数:记录能提取排序键,为什么搜索值还要自己先转换 任务列表里保存的是字典,按截止时间排序。给 bisect_left 配上提取截止时间的 key 函数后,你把另一个任务字典作为搜索值传进去,结果仍然抛出类型错误。容易误解的地方是,二分查找会把 key 用于列表中的元... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python median_low 与 median_high:中间值算出来了,为什么却不是任何一条观测 有四次试运行耗时:二、七、九、二十秒。你想挑一次处于中间位置的试验,交给同事复核,普通中位数却给出八秒。计算没有错,只是八是两条中央观测的平均值,本来就不需要出现在原始数据中。选择一条真实观测与概括一组数值,是两个不... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python tomllib 的日期类型:配置看起来相同,为什么一项能比较日期另一项只是字符串 排期脚本从 TOML 配置读取活动日期,文件里两行都显示二〇二六年十月二日。接进日期比较时,其中一项可以直接使用,另一项却出现类型错误。差别藏在引号里:不带引号的合法本地日期会被解析成 date,带引号的内容仍然是字... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python Enum 同值别名:定义了三个名字,为什么遍历只有两个成员 系统把等待状态从 WAITING 改名为 PENDING,为兼容旧配置,两个名字暂时都保留并使用同一个字符串值。读取旧名字没有报错,可是生成帮助清单时,遍历枚举只出现两个状态。这里不是循环漏读,也不是名字被删除,而是... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python parse_known_args 参数转发:未知的 --for,为什么被当成 --format 吃掉 包装脚本只想读取自己的 --format,再把其他选项交给下游工具,于是使用 parse_known_args。调用者传入下游的 --for json,结果下游什么也没收到。原因是已知解析器默认允许长选项缩写,--f... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python sqlite3.Row 重名列:两份 id 都在,为什么转成字典却只剩一个 把用户表与订单表连接后,两列都叫 id。终端按位置打印时,用户编号和订单编号都在;换成 dict(row) 交给接口,却只剩一个字段。应先核对结果列名,再检查转换方式,不能因为 SQL 返回了两列,就假定名称访问也能... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读