-
在 Polars 中,直接对 struct 列使用 with_fields() 无法消除外层 null —— 即使内部字段已填充,整个 struct 仍可能为 null;正确做法是用 pl.struct() 重建列,显式指定已填充的字段,从而重置外层空值状态。 在 Polars 里,如果直接对 st
-
packaging 26.2 与 pip 26.1 带来了新的 Python 锁文件实践。本文拆解 pylock.toml 能锁定的依赖信息、解释器和平台边界,以及旧 pip 的兼容回退方案。
-
importlib.metadata 读取的是已安装 distribution 的版本元数据,不是源码目录里的模块版本。本文从 pyproject.toml 配置、解释器一致性、distribution 名称和 PackageNotFoundError 四个方面给出排查方法。
-
Python pathlib 拼接用户路径时,绝对路径段会让前面的基目录失效。本文对比 / 与 joinpath(),说明如何先判断相对路径,再用 resolve()、relative_to() 和 is_file() 检查目录边界与文件类型。
-
csv.DictReader 遇到缺失列时不会自动替业务规则报错。本文用一个订单 CSV 导入器区分缺失列、缺失值和多余列,并给出带文件名、行号和字段名的 Python 错误处理代码。
-
asyncio.TaskGroup 中一个子任务失败后,其他任务会被取消,但异常不会自动变成单个 Exception。本文用可复现实验拆开 ExceptionGroup、except* 与取消传播的关系,并给出重试边界。
-
Python asyncio.timeout 会在截止时间到达时取消当前任务,并在上下文管理器退出时把 asyncio.CancelledError 转换为内置 TimeoutError。本文给出最小写法,再说明异常捕获位置、动态截止时间、expired 状态、嵌套超时和 wait_for 的区别。
-
Python str.expandtabs 会按照当前字符列和 tabsize 把制表符展开到下一个制表位。本文用小例子说明默认 8 列、自定义 tabsize、换行重置,以及字符计数和终端显示宽度的区别。
-
Python 3.12 起可以用 sqlite3.Connection.setconfig() 设置布尔型 SQLite DBCONFIG 选项,再用 getconfig() 读取当前连接状态。本文以外键配置为例,说明调用方式、版本与底层 SQLite 能力边界,以及生产初始化策略。
-
Python 3.14 的 pathlib.Path.copy 与 copy_into 解决了路径对象复制的表达问题,但二者对目标参数的含义不同。本文用备份目录场景说明如何保留源目录名、处理目标已存在、控制元数据与符号链接,并给出旧版本兼容边界。
-
用 dataclasses.replace 修改 Python dataclass 时,按字段声明、InitVar、init=False 和 __post_init__ 的边界排查常见 TypeError 与 ValueError,并掌握返回新对象的正确写法。
-
str.isidentifier() 只判断字符串是否符合 Python 标识符的词法形态,def 和 class 仍可能返回 True。本文结合 keyword.iskeyword() 说明两层判断的分工,并给出可复用的命名校验函数。
-
为自定义对象实现排序时,Python functools.total_ordering 可以根据 __eq__ 和一个排序比较方法补齐其余比较运算。本文用一个可排序任务对象说明比较键、NotImplemented、继承边界与性能取舍。
-
Python 3.13 引入的 Path.from_uri 能解析 file URI;Python 3.14 进一步明确 authority 行为。本文用 UNC 示例说明 Windows 与非 Windows 的差异、绝对路径要求和兼容处理。
-
Python sqlite3 的 autocommit、isolation_level 与 with con 分别控制什么?本文按请求级写入、单语句提交和显式写锁场景对比三种事务模式,给出自动提交回滚、连接关闭、SAVEPOINT 与旧代码迁移方案。