最新GNU numfmt 单位转换:同一个 1K,为什么可能是1000也可能是1024 监控报表里都写1K,一处还原成一千,另一处却是一千零二十四,数据并不一定有错,只是单位规则没写清楚。更隐蔽的是,把精确字节数格式化成短标签再转回来,可能得到另一个整数。numfmt能够处理常见缩放与显示,但它不会替你... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
最新JavaScript matchAll 的游标副本:遍历已到末尾,原正则的位置为什么没动 把exec循环换成matchAll以后,匹配结果已经读到最后,原正则的lastIndex却仍停在一。接着重新调用,又从同一个非零位置开始。这种行为来自matchAll为普通正则创建匹配副本:它保留创建时的起点,遍历推... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
最新Python 格式化的转换顺序:加了 !r,为什么数字格式 d 反而不能用了 给调试输出加上!r以后,原本能使用的整数格式04d突然报错;自定义对象的对齐逻辑也不再被调用。原因是!r不是给最终文字加上一层引号,它先把原对象转换为repr字符串,再让字符串处理后面的格式规范。理解转换和格式化的先... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
最新Python harmonic_mean:结果返回零,后面的非法数据为什么没有报错 统计函数成功返回一个数字,很容易被调用者当成“所有输入都有效”的证据。但harmonic_mean在本例版本中遇到零会提前返回,因此零后面还有负数,也可能没有报错。把同一组数据换个顺序,负数先被看到,结果又变成异常。... yunqueblog/ 技术教程/ 2026-10-04/ 1 阅读
最新Python file_digest 的输入分支:同样读过两字节,为什么 BytesIO 与文件摘要不同 单元测试用BytesIO代替文件,先读掉一个头部,再调用file_digest。测试算出了全体字节的摘要,换成真实文件后却得到剩余尾部摘要。两者都接受二进制文件对象,但在本文运行版本里走了不同实现分支。这个反例提醒我... yunqueblog/ 技术教程/ 2026-10-04/ 1 阅读
最新Python partition 与 rpartition:找不到分隔符,原文究竟放在哪一格 解析一行简单的key=value时,partition能直接返回三项,看起来比split方便。但将它改成rpartition以后,没有等号的输入却从左侧字段移动到了右侧字段。如果调用代码只读取固定位置,不检查中间项,... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
最新Python Decimal.normalize:只是想删尾零,为什么有效数字也被改了 为了把123.4500展示成123.45,调用normalize看起来很自然。但在精度为四的上下文中,它会返回123.4。两个尾零确实不见了,更重要的一位有效数字也变了。normalize不是一个只修剪字符串外观的工... yunqueblog/ 技术教程/ 2026-10-04/ 1 阅读
最新Python itertools.compress:选择器已经用完,为什么源数据又被取走一项 有一条数据流和一串选择标记,compress可以按标记筛出需要的元素。但选择器只有两项时,数据流结束过滤后却可能已经走过第三项。若后面还要继续消费同一个迭代器,这个差异就会造成一条记录看似凭空消失。过滤结果只描述哪些... yunqueblog/ 技术教程/ 2026-10-04/ 1 阅读
SQLite INSERT OR IGNORE:非法记录被跳过,为什么外键错误仍会中断 把INSERT改成INSERT OR IGNORE以后,重复键、不合格数量和缺失字段似乎都被安静跳过,于是有人把它当成“尽量导入,遇到什么都继续”。一旦出现外键错误,这个预期就会失效,而且同一条多行INSERT里较早... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
SQLite 复合外键:其中一列为空,为什么剩下一列不再检查匹配 一条记录用租户和编号共同指向父表,租户写成不存在的值,编号却为空,插入竟然成功。若只检查PRAGMA foreign_keys已经打开,很容易把它当成SQLite漏验。真正原因是复合外键对NULL有明确规则:任意一个... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读