3 分钟阅读
ExitStack:运行时才知道数量的资源怎么清理
同时打开几份文件时可以嵌套 with,但数量由输入决定时,固定语法层级就不方便。资源获取到一半失败,也需要释放前面已经取得的资源。
同时打开几份文件时可以嵌套 with,但数量由输入决定时,固定语法层级就不方便。资源获取到一半失败,也需要释放前面已经取得的资源。
转账或批量导入由多条 SQL 组成,只完成前半部分会留下不一致状态。事务把这些修改放到共同的提交边界内。
用户输入中出现空格、引号或特殊符号时,拼接命令字符串容易改变命令含义。直接传参数列表能保留各参数的边界。
把临时文件统一写成 /tmp/result.txt,多个任务会互相覆盖,异常退出还会留下垃圾。独立临时目录可以减少名称冲突并集中清理。
大量 print 难以区分级别和模块,也不方便关闭调试信息。日志需要稳定的事件描述与适当的上下文,才能在排查时被检索。
手动读取 sys.argv 并按位置转换,很快会出现缺失参数、错误类型和帮助文案不一致。解析器可以集中表达这些规则。
Python 默认允许把 NaN 编码成特殊字面量,但严格 JSON 消费者可能拒绝它。一个本地能往返的对象不一定是合规的交换格式。
服务器与用户不在同一个时区时,直接展示无时区 datetime 会产生歧义。事件记录需要能明确定位到时间线上的一点。
用浮点表示金额后,在边界值上保留两位可能出现意外。财务规则需要明确十进制输入、精度和舍入方式,而不是只控制输出格式。
给一个读取配置的函数加缓存可以减少重复工作,却也可能让修改后的配置一直不可见。缓存正确性首先取决于结果是否只由键决定。
分组代码里反复检查键是否存在很繁琐。defaultdict 可以按需生成容器,但其读取行为也引入了容易忽略的副作用。
集合能回答“是否出现过”,但无法回答出现多少次。日志级别、标签和词频分析通常需要一个从元素到次数的映射。