logo
47

异常处理

⏱️ 30分钟

异常处理(Error Handling):出错可控,而不是崩溃

你现在可能会困惑什么

“出现异常是不是我代码写得很差?”

不一定。很多异常来自外部输入、网络、文件系统。 关键是要可控地处理。

一句话定义

异常处理用 try/except/else/finally 管理错误分支与收尾逻辑。

生活类比

导航遇到封路不是终点,而是自动改道。

最小可运行例子

try:
    num = int("abc")
except ValueError:
    print("输入格式错误")

完整结构

try:
    x = 100 / int(input("请输入除数: "))
except ValueError:
    print("请输入整数")
except ZeroDivisionError:
    print("不能除以 0")
else:
    print(x)
finally:
    print("结束")

课堂小测(5 分钟)

  1. 实现安全除法函数。
  2. 区分并处理两类异常。
  3. 记录错误日志文本。

课堂小测参考答案与判分点

  • 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
  • 判分点 1(正确性):主流程结果正确,关键分支可执行。
  • 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
  • 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。

迁移任务(课后)

给一个文件读取脚本加异常处理和兜底输出。

本节验收标准

你能独立做到:

  • 写出分类型异常处理
  • 理解 else/finally 的触发时机
  • 保留可定位错误信息

常见报错与调试步骤(新手版)

  • 报错看不懂:先读最后一行错误类型(如 TypeErrorNameError),再回到对应代码行定位。
  • 不确定变量值:在关键位置临时 print(变量, type(变量)),先确认数据是否符合预期。
  • 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。

常见误区

  • 误区:裸 except 一把抓。
  • 正解:优先具体异常,最后再兜底。