python教程技术文章
-
同一个 Python logger 同时输出控制台和审计日志时,handler 级 Filter 可以返回 LogRecord 副本,只给目标 handler 增加字段,避免污染其他输出。391 收藏 -
subprocess.run 超时后会终止并等待直接子进程,不能在 TimeoutExpired 中继续判断它是否存活。需要观察超时边界时改用 Popen、poll 和 communicate,区分最近状态并安全回收输出。213 收藏 -
Python 的 typing.Protocol 主要服务静态结构化类型检查;即使加上 @runtime_checkable,isinstance() 也只适合确认属性是否存在,不会验证方法签名、参数类型、返回类型和业务行为。本文用代码拆开两种检查的边界,并给出运行时补强方案。254 收藏 -
Python dataclasses.replace 会按原类型创建新实例,适合更新 frozen dataclass。本文说明字段覆盖、__post_init__、InitVar、init=False 和嵌套可变字段的实际边界。428 收藏 -
Python queue.Queue 的 join() 卡住,通常不是队列里还有元素,而是消费者取走任务后少调用了 task_done()。本文解释未完成计数,给出 finally 配对写法、异常处理和停机复查清单。484 收藏 -
Python datetime 的 fold=0 和 fold=1 可以区分夏令时回拨产生的两次相同本地时间。本文说明 ZoneInfo 的用法,以及比较、存储和春季 gap 的处理边界。230 收藏 -
用 Python decimal.quantize 处理金额时,先用 Decimal 字符串和 0.01 量子固定小数位,再按业务规则选择 ROUND_HALF_EVEN、ROUND_HALF_UP 或方向性舍入,避免把截断、中点取偶数和远离零混为一谈。306 收藏 -
Python csv.DictReader 读取列数不稳定的 CSV 时,可以用 restkey 接住多余字段,用 restval 区分缺失字段,再结合行号和异常归档策略决定放行或拒绝。143 收藏 -
用 pathlib 和 os.path.commonpath 校验 ZIP 成员路径,结合文件类型、成员数量和解压后大小限制,写出可处理不可信压缩包的 Python zipfile 解压方案。449 收藏 -
Python pathlib 的 Path.glob 和 Path.rglob 不会自动排除点号开头的隐藏目录。本文说明如何包含或排除隐藏路径,并比较结果过滤与 Path.walk 裁剪目录树的写法。207 收藏 -
Python re.finditer 默认只返回非重叠匹配。本文用 ababa 说明漏结果的原因,并给出正向先行断言和按起点扫描两种处理方式。193 收藏 -
dataclasses.field 的 default_factory 接收的是零参数可调用对象,应该写成 list,而不是已经创建好的 []。本文对比三种写法,解释报错位置,并用两个实例的内容和身份检查确认列表隔离。495 收藏 -
Python 3.15 同时引入了面向 free-threaded 构建的 abi3t。本文从兼容目标、Limited API、构建工具和 wheel 文件名四个角度,说明什么时候选 abi3.abi3t,什么时候必须单独构建 cp315t。331 收藏 -
Python typing.Annotated 的元数据默认会被 get_type_hints() 移除。本文演示如何用 include_extras=True 保留注解,并通过 get_origin、get_args、__origin__ 和 __metadata__ 读取基础类型与元数据。347 收藏 -
QueueListener 停止时不会凭空把队列清空,而是把停止哨兵放到队尾并等待监听线程结束。本文用一个小型文件日志项目演示正确的关闭顺序、验收方式和常见丢日志边界。496 收藏