Python pprint 的可读性检查:循环列表能打印出来,为什么仍然不能靠那段文字重建 调试一个列表时,pprint顺利输出了内容,于是把那段文字保存下来,期待以后还原对象。但其中出现了Recursion提示,已经不是普通的列表字面量。格式化能够结束、文字能供人阅读、对象关系可以完整保存,是三个需要分别... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python textwrap.indent 的空白行:都加了前缀,为什么段落中间仍然缺两处标记 给一段诊断文本逐行加上引用标记,首尾两行正常,段落中间却没有标记。检查发现,一行完全为空,另一行只含两个空格。textwrap.indent默认只为并非全由空白组成的行添加前缀,所以“把整段文字传进去”不意味着每一行... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python range 的相等规则:终点与步长不同,为什么仍然可能是同一个序列 两项批处理配置的终点分别是六和五,构造成range以后比较却返回True。若直接拿range当缓存键,第二项还会覆盖第一项。这并非终点被修改,而是range的相等关系比较实际表示的整数序列,不要求构造参数逐字相同。本... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python bytes.hex 的分组方向:每两字节一组,为什么短组有时在开头有时在末尾 检查一段五字节数据,希望每两字节放一组。hex输出却把第一字节单独留在开头,而预期是最后一字节落单。bytes_per_sep除了指定组宽,还用正负号指定从哪端计算分隔位置;这种显示差异不表示报文内容或字节序发生了变... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python int.to_bytes 的有符号边界:同一个 ff,为什么既能读成 255 又能读成负一 设备报文里收到一个ff,日志工具显示二百五十五,业务解析器却显示负一。字节没有变,差别来自字段约定:无符号整数把全部八位当作非负数值,有符号整数则按补码解释。同一份二进制数据不能脱离位宽和符号规则单独确定含义。本例在... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python length_hint 的估计值:提示还有八项,为什么最终只读出了三项 给一批记录分配缓冲区时,希望先知道大概有多少项。调用length_hint拿到八,却只读出三项,很容易误判为数据丢失。这个接口允许返回估计值,结果可以偏大也可以偏小;它表达的是优化机会,不能替代真正的迭代结束信号。本... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python robotparser 的抓取延迟:已经读到三秒限制,为什么 can_fetch 仍连续返回真 给一个已获授权的数据采集程序接入robots解析后,Crawl-delay明明返回三秒,连续调用can_fetch却每次都为True。原因是这个方法判断路径政策,时间间隔由另一些方法提供为元数据;解析器不是请求调度器... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python sqlite3 转换器优先级:表声明已经选好类型,查询别名为什么还能换一种结果 同一张表、同一个值,普通SELECT返回一种对象,加一个带方括号的列别名却换了另一种结果。打开sqlite3的自动类型检测以后,结果的Python类型不只由建表声明决定;查询可以通过列名类型标记选择转换器,而且在两个... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python codecs 的转换类型:rot_13 明明能查到,为什么字符串 encode 却拒绝它 维护一段旧文本工具时,看到注册表里有rot_13,于是直接调用字符串的encode,结果得到LookupError。换成codecs.encode却立即成功。错误名称很容易让人以为机器缺少编码器,实际关键是调用接口要... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python 正则原子组:普通分组能匹配 integer,换成原子组后为什么失败 词法检查器要识别in和integer两个关键字,普通分组能接受integer。为了减少回溯,把分组改为原子组,原本合法的输入却失败了。原子组并不是普通分组的无损加速开关:一旦成功离开它,组内曾经留下的其它选择就不能在... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读