异常捕获、传播与清理
Python 数据类型、函数与异常处理#Python全栈#第二阶段#Python 数据类型、函数与异常处理#异常捕获、传播与清理约 598 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
异常发生后,程序的控制流程如何变化?
追问 当前函数没有捕获时,调用者如何接收到异常?
try、except、else 与 finally 分别在什么条件下执行?
追问 正常完成、捕获异常与异常继续传播时,各分支有什么差异?
为什么应尽量捕获具体异常,并缩小 try 范围?
追问 把整个程序包在一个 except 中,可能掩盖哪些编程错误?
多个 except 的顺序如何确定?
追问 较宽泛的异常类型写在前面,可能如何影响后面的处理分支?
except Exception 与不指定类型的 except 有什么区别?
追问 键盘中断与退出信号为什么不应被普通业务逻辑无意吞掉?
raise 如何主动报告错误或重新抛出异常?
追问 输入校验失败与捕获后仍无法处理,分别应怎样把失败传给调用者?
raise NewError(...) from original_error 有什么作用?
追问 如何保留底层原因,同时提供调用者能理解的业务信息?
为什么应避免在 finally 中返回值?
追问 它可能怎样覆盖原返回值或掩盖正在传播的异常?请用小样例验证。
assert 是否适合验证所有用户输入?
追问 运行方式可能如何影响断言?业务校验失败应该如何稳定地报告?
应该返回 None、返回错误结果,还是抛出异常?
追问 合法的“未找到”、错误输入和程序无法继续分别怎样约定,如何避免调用者混淆?
异常处理与传播可结合 Python 官方错误与异常教程 验证,不以直接忽略异常作为修复。