Python 源码编码探测:写了 coding 注释,为什么 UTF-8 BOM 仍可能让文件报错 这是源码约定,不是猜任意文本编码写源码检查工具时,直接用固定编码读取所有 py 文件,可能错过文件自己声明的编码;反过来,扫描任意一处 coding 注释也不符合解释器规则。tokenize.detect_encod... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite progress_handler:查询怎样主动停下来,为什么回调次数不是秒数 先给长查询一个可观察的停止条件交互式工具允许用户取消查询时,不能只把界面的加载图标关掉。数据库计算本身也要收到停止信号。Python 的 SQLite 连接可以注册进度回调,运行到检查点时读取一个轻量状态;回调返回非... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python 描述符优先级:实例字典里明明有值,为什么点号读到了另一份 同一个名称可以有两处来源调试对象时,vars(obj) 已经显示某个字段,obj.field 却返回另一个值,不一定是缓存或赋值失败。点号读取会经过属性查找规则,类上放置的描述符可以参与其中。关键不是哪个值最后写入,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python Signature.bind:参数能对上函数签名,为什么仍不代表值合格 先检查怎么调用,再决定是否执行工具分发器或任务入口拿到一组参数时,常常希望先知道它能否对应目标函数:必填项缺了吗,同一个参数给了两次吗,只能按位置传入的参数被写成关键字了吗。inspect.signature 得到的... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 解析 MIME 邮件:三个 text 部分,为什么只有一个该当正文 按 text 类型全部拼起来,会读到什么解析一封带附件的邮件时,把 walk 遍历到的所有 text/plain 拼成正文,可能把附带的说明文件也读进去;再把 text/html 加上,又会重复一次正文。MIME 邮... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python ElementTree 查找 XML:标签看起来叫 item,为什么 find 仍返回空 看到的短名字,不是完整身份从接口拿到一份 XML,肉眼能看到 item,代码 root.find("item") 却返回 None,很容易先怀疑编码或文件没有读完整。如果元素声明了默认命名空间,解析后的标签身份包含命... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python mock.patch 补丁位置:函数明明来自这里,为什么替换后仍没有生效 替换了函数,调用方却没有改变给代码写测试时,经常想把读取接口替换成一个可控结果。patch 没有报错,替身也创建成功,业务函数却仍返回原值,问题可能出在名称查找位置。函数从哪个文件定义出来,与执行到调用语句时从哪里取... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python reload 重载模块:函数更新了,旧引用为什么仍可能执行旧代码 修改源文件以后,谁真正变了在交互式调试里修改模块,再调用 importlib.reload,往往能继续试验。但重载不是重新启动解释器:模块内的名称会重新绑定,其他地方保存的函数引用未必跟着更新。更容易误判的是,旧函数... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python quantiles 分位数:同一组数据,inclusive 与 exclusive 为什么给出不同切点 先固定方法,再比较数字比较两份任务耗时报告时,平均值完全相同,四分位数却不同,不一定是谁算错了。有限数据的分位数需要约定每个观测值对应的位置,再计算中间切点。Python 标准库 statistics.quantil... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python ZIP 重名成员:按文件名读取之前,先确认压缩包里有几份 压缩包不是文件名字典收到一个资料包,程序读取 report.txt 后就开始生成摘要,看起来很自然。但 ZIP 可以保存多个名字相同的成员。界面只展示名称时,它们很容易被误看成一份;程序若先把成员列表转成以名称为键的... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读