20 分钟
Python 入门

with 语句与异常处理基础

掌握 with 自动关闭和 try-except 异常处理

  • 理解 with 语句自动关闭资源
  • 用 try-except 捕获异常
  • 处理常见错误

with 语句

with 会在代码块结束后自动关闭文件,哪怕中间抛了异常也一样关。

示例代码(可运行)

try-except 捕获异常

程序出错时别直接崩,把错误兜住处理好:

示例代码(可运行)

常见异常类型

示例代码(可运行)
💡异常处理的价值

try-except 让程序在遇到错误时不崩溃,给出友好提示并继续运行。处理文件、网络、用户输入时特别重要。

🐍资深工程师经验谈

异常处理有三条一定要守住的原则:永远不要写裸 except:(会吞掉所有错误包括 KeyboardInterrupt),要捕获具体的异常类型;不要用异常处理来控制正常流程(EAFP 除外:Easier to Ask Forgiveness than Permission 是 Python 的哲学,但要适度);with 语句不仅用于文件——任何实现了 __enter__/__exit__ 的对象都叫「上下文管理器」,线程锁、数据库连接、临时目录都可以用 with。这是 Python 设计得很妙的一个地方。

预测输出
try:
    print(10 / 0)
except ZeroDivisionError:
    print("出错了")
print("继续")
找 Bug用户输入非数字的话,int() 会报 ValueError,程序直接崩。用 try-except 处理就行。
num = int(input("输入数字:")) print(num + 1)
填空题填写空白处的代码
: f = open("a.txt") FileNotFoundError: print("文件不存在")
选择题

打开不存在的文件会引发什么异常?

选择题

with 语句的主要作用是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

Python 里整数、字符串甚至函数都是对象,堆在内存里;变量不是装东西的盒子,而是一张贴在对象上的「名字标签」(引用)。id(x) 看对象身份,is 比身份、== 比值。CPython 会缓存 -5~256 的小整数,所以 a=1;b=1 时 a is b 为 True,但 a=300;b=300 未必。结论:判断值是否相等永远用 ==,判断是不是 None 才用 is。

挑战任务

安全读取

简单+50 XP

尝试读取不存在的文件,用 try-except 捕获并输出友好提示。

安全读取
2 个测试用例

课后作业

安全除法器

中等+20 XP

输入两个数做除法,捕获除零错误和值错误。

安全除法器
1 个测试用例