Python suppress 筛选异常组:ValueError 已经忽略,为什么嵌套错误仍然继续抛出 批处理把几条错误合成ExceptionGroup后,调用方只想忽略已知可接受的ValueError。加上suppress(ValueError)以后仍抛出异常组,不一定表示忽略失败:组内如果还有别的类型,它们应该继续... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python except as 的名称清理:异常处理结束,为什么原来同名的变量也不见了 脚本先给 error 赋了一个默认说明,随后又写 except ValueError as error。异常在处理块里打印正常,离开后再次访问却抛出 UnboundLocalError。这里不是异常还没被捕获,而是处... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Node.js error 事件:监控已经记录了异常,程序为什么仍然会抛错 给事件对象加上监控回调后,日志已经记下错误,程序却仍然抛出异常。原因可能是注册了 errorMonitor,却没有真正的 error 监听器。监控负责观察错误事件,并不代表应用已经接手处理;两者的职责不能靠“日志里看... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python mock.side_effect:响应列表用完后,为什么不会退回默认返回值 测试一个会重试的读取函数,给替身安排四次响应,同时设置默认返回值。原以为第五次会继续返回默认值,测试却出现 StopIteration。这里的响应列表有自己的消费状态;列表耗尽不会自动切换到另一项配置,多调用一次本身... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python ExitStack 动态清理:第三个资源打开失败,前两个怎样按倒序释放 资源数量运行时才知道一个任务要按清单打开多个输入文件,再创建输出通道。清单长短不固定,第三次获取还可能失败。如果先把所有资源放进列表,最后才安排关闭,中途异常可能让前面已经成功打开的资源无人管理。ExitStack ... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 异常链:from None 隐藏了旧报错,为什么上下文对象还在 错误对象与报错展示分别检查底层读配置失败,外层把它包装成更容易理解的错误,是常见做法。问题在于,普通 raise、raise from 原异常和 raise from None 并不只是报错文字不同。它们会改变异常链... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Promise.finally 清理流程:普通返回值会透传,清理失败却可能覆盖原错误 请求结束后关闭加载提示,常常适合放进 Promise.finally,因为成功和失败都需要执行同一段收尾。但“无论结果如何都清理”并不等于“清理永远不会改变结果”。如果清理函数自己抛出异常,调用方最后看到的可能已经不... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python contextmanager:资源清理完成了,异常为什么还应该传出去 把资源状态和业务结果分开验收导入报表时,第二行金额格式错误,读取流已经关闭,任务是否可以显示成功?当然不能。资源是否释放与数据是否处理完成,是两项独立结果。把关闭动作封装成上下文管理器后,最容易漏掉的是后半项:为了记... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读