SQLite TEMP 同名表:主表没有改,为什么 SELECT 却读到另一份内容 调试脚本建立了一张叫item的临时表,后面原封不动执行SELECT label FROM item,结果突然变成另一份数据。主库中的item可能完全没有改变,只是未带数据库名的表引用先找到了temp里的同名对象。查询... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite 同条 UPDATE 的取值时机:x 已经加一,为什么 y 仍然拿到旧的 x 想让x增加一,再把新x写进y,把两项放进同一条UPDATE的SET列表后,却发现y得到旧x。SQLite针对被更新行的列引用,会先求出右侧标量表达式,再实施赋值。SET中从左到右的书写位置,不能当作逐行执行的脚本步骤... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript JSON 白名单:只想筛顶层字段,为什么嵌套对象也变成空了 导出一份任务数据时,只想保留顶层job和rows,于是把这两个名字放进JSON.stringify的第二个参数。结果两个顶层字段都在,job里面却变成空对象,rows中的对象也丢了字段。数组形式的replacer是一... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Array.fill 的对象参数:只改第一格,为什么三格的计数一起变了 给三张任务卡初始化计数,用Array(3).fill({ count: 0 })看起来简洁。随后只把第一张卡的count改成七,打印时三张卡却全是七。fill收到的是已经创建好的一个对象,它不会替每个位置再执行一次对... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python array.byteswap:数字顺序没有倒过来,为什么每个元素的值都变了 把一段二进制数据交给array.frombytes,能成功往返成相同字节,并不说明读出的整数符合发送方的含义。array采用本机元素表示;byteswap可以交换每个元素内部的字节,但它会原地改值,也不会把数组元素顺... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python urlsplit 的端口属性:地址已经拆分成功,为什么读取 port 才抛出异常 把urlsplit放进try里没有报错,就记录“网址校验成功”,后续代码访问parts.port却突然出现ValueError。这不矛盾:拆出URL的几个文本组件,与把端口转换成受范围约束的整数,不一定在同一个时点发... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python EmailMessage 重复头字段:再赋一次值,为什么旧值并没有被替换 整理邮件元数据时,把msg[字段名]写两次,看起来与普通字典更新相同。但EmailMessage允许某些头字段重复出现,赋值可能是在末尾追加。只读一次msg[字段名]又拿到一个字符串,很容易让第二份值在检查中消失。需... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python TextIOWrapper 换行转换:已经写好 CRLF,为什么文件里又多了一个 CR 导出文本时,程序先把每行结尾拼成CRLF,又把文本流的newline设成CRLF,结果下游看见多余回车。这里通常发生了两次转换:字符串里已经有CR,文本层又把其中的LF替换成CRLF。先分清内存字符串与最终字节,就能... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python partialmethod 方法绑定:预填了增量,为什么 partial 却把它放进了 self 一个计数器类想提供add_two快捷方法,最自然的写法似乎是在类里写partial(add, 2)。但实例调用它时并没有自动补入self,预填的2反而排到了最前面。问题出在类属性被取出时的绑定行为,而不是整数2不能作... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python suppress 筛选异常组:ValueError 已经忽略,为什么嵌套错误仍然继续抛出 批处理把几条错误合成ExceptionGroup后,调用方只想忽略已知可接受的ValueError。加上suppress(ValueError)以后仍抛出异常组,不一定表示忽略失败:组内如果还有别的类型,它们应该继续... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读