你有没有遇到过这种情况:程序运行到一半,突然崩溃了,报了一堆红色错误?今天,我们来学 —— 异常处理,让程序遇到错误时不崩溃,而是优雅地告诉用户「出了点小问题」!
一、什么是异常?
异常就是程序运行时遇到的「意外情况」。比如:
print(10 / 0) # 除以零!
int("abc") # 字符串转数字失败!
open("不存在.txt") # 文件不存在!ZeroDivisionError: division by zero
ValueError: invalid literal for int() with base 10: 'abc'
FileNotFoundError: No such file or directory
这些都是「异常」,不处理的话程序直接崩溃。
二、try / except —— 捕获异常
用 try 包住「可能出错的代码」,用 except 处理出错的情况:
try:
result = 10 / 0
except:
print("出错了,不能除以零!")出错了,不能除以零!
程序不崩溃了,而是打印了提示信息。
三、捕获具体的异常类型
try:
num = int(input("请输入一个数字:"))
print(10 / num)
except ValueError:
print("输入的不是数字!")
except ZeroDivisionError:
print("不能除以零!")# 输入 "abc":输入的不是数字!
# 输入 "0":不能除以零!
# 输入 "2":5.0
四、else 和 finally
try:
num = int(input("请输入数字:"))
result = 10 / num
except ValueError:
print("不是数字!")
except ZeroDivisionError:
print("不能除以零!")
else:
print(f"结果是:{result}") # 没有异常时执行
finally:
print("程序结束") # 无论如何都执行# 输入 "2":
结果是:5.0
程序结束
五、常见异常类型
| 异常名 | 触发原因 |
| ValueError | 值类型不对,如 int("abc") |
| ZeroDivisionError | 除以零 |
| FileNotFoundError | 文件不存在 |
| IndexError | 列表下标越界 |
| KeyError | 字典键不存在 |
六、实战:健壮的成绩录入系统
def input_score(name):
while True:
try:
score = int(input(f"请输入{name}的成绩(0-100):"))
if score < 0 or score > 100:
print("成绩必须在0到100之间!")
continue
return score
except ValueError:
print("请输入数字,不要输入文字!")
def save_score(name, score):
try:
with open("scores.txt", "a") as f:
f.write(f"{name}:{score}\n")
print(f"✅ {name}的成绩已保存!")
except Exception as e:
print(f"保存失败:{e}")
# 使用
name = input("请输入学生姓名:")
score = input_score(name)
save_score(name, score)请输入学生姓名:小明
请输入小明的成绩(0-100):abc
请输入数字,不要输入文字!
请输入小明的成绩(0-100):150
成绩必须在0到100之间!
请输入小明的成绩(0-100):95
✅ 小明的成绩已保存!
七、练习题
练习1:安全地读取文件
try:
with open("data.txt", "r") as f:
print(f.read())
except FileNotFoundError:
print("文件不存在,请先创建文件!")练习2:安全的列表访问
fruits = ["苹果", "香蕉", "橘子"]
try:
print(fruits[10])
except IndexError:
print("下标越界了,列表没有这么多元素!")八、今天学到了什么?
-
- 异常是程序运行时的「意外情况」
-
- try / except:捕获并处理异常
-
- else:没有异常时执行
-
- finally:无论如何都执行
-
- 常见异常:ValueError、ZeroDivisionError、FileNotFoundError
-
九、下期预告
学会了异常处理,下节课我们来学 —— 面向对象,用「类」来描述现实世界的事物!
敬请期待:《小学生Python:面向对象 —— 用代码描述世界》
喜欢这篇文章吗?点个「在看」,让更多小朋友学会写健壮的 Python 程序!