目录
在编写程序时,难免会遇到各种“错误”或“异常”,它们会导致程序中断执行。如果不加以处理,这些问题会让用户感到困惑甚至崩溃。
Python 提供了强大的异常处理机制,让我们可以在程序出错时做出合理反应,而不是直接崩溃。
本文将带你了解:
- 常见的错误类型
- 如何使用
try...except捕获异常 - 多个异常的处理方式
- 使用
else和finally进行流程控制 - 实战示例讲解
一、什么是错误与异常?
🔍 错误(Error):
是指程序运行过程中发生的严重问题,通常是硬件或虚拟机层面的问题,比如内存不足、栈溢出等。这类问题一般我们不处理。
📢 异常(Exception):
是程序运行期间检测到的“非致命性错误”。例如除以零、访问不存在的变量、打开不存在的文件等。这些情况可以通过代码进行捕获和处理。
二、常见内置异常类型
| 异常类型 | 描述 |
|---|---|
SyntaxError | 语法错误 |
NameError | 变量未定义 |
TypeError | 类型不匹配 |
ValueError | 值不合适 |
IndexError | 索引超出范围 |
KeyError | 字典键不存在 |
ZeroDivisionError | 除以零错误 |
FileNotFoundError | 文件找不到 |
示例:
print(undefined_variable)
# NameError: name 'undefined_variable' is not defined
int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'
1 / 0
# ZeroDivisionError: division by zero
三、使用 try...except 捕获异常
✅ 基本语法:
try:
# 可能出错的代码
except 异常类型:
# 出错后的处理逻辑
示例 1:捕获一个特定异常
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
输出:
不能除以零!
示例 2:捕获多个异常
try:
num = int(input("请输入一个数字:"))
result = 100 / num
print("结果是:", result)
except ValueError:
print("请输入一个有效的整数!")
except ZeroDivisionError:
print("不能除以零!")
示例 3:捕获所有异常(不推荐滥用)
try:
x = 1 / 0
except:
print("发生了一个未知错误!")
⚠️ 注意:尽量避免这样写,建议明确指定要捕获的异常类型,以便定位问题。
四、else 和 finally 的使用
✅ else 子句:
当没有发生异常时执行。
try:
num = int(input("请输入一个数字:"))
result = 100 / num
except ValueError:
print("请输入一个整数!")
except ZeroDivisionError:
print("不能除以零!")
else:
print("计算成功,结果是:", result)
✅ finally 子句:
无论是否发生异常,都会执行。常用于资源清理操作(如关闭文件、网络连接等)。
try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("文件未找到!")
finally:
print("程序结束,正在清理资源...")
五、抛出异常:raise 关键字
我们可以主动抛出异常,来提醒调用者注意某些问题。
def check_age(age):
if age < 0:
raise ValueError("年龄不能为负数!")
print("年龄合法:", age)
try:
check_age(-5)
except ValueError as e:
print("捕获异常:", e)
输出:
捕获异常:年龄不能为负数!
六、实战练习:带异常处理的学生分数录入系统
下面是一个完整的示例,演示如何在学生信息录入中加入异常处理,防止程序崩溃。
def input_score():
while True:
try:
score = float(input("请输入学生成绩(0~100):"))
if 0 <= score <= 100:
return score
else:
print("输入超出范围,请输入 0 到 100 之间的数字。")
except ValueError:
print("输入无效,请输入数字!")
def classify_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "E"
# 主程序
print("欢迎使用学生评分系统")
student_name = input("请输入学生姓名:")
student_score = input_score()
grade = classify_grade(student_score)
print(f"\n学生 {student_name} 的成绩等级为:{grade}")
运行效果示例:
欢迎使用学生评分系统
请输入学生姓名:张三
请输入学生成绩(0~100):abc
输入无效,请输入数字!
请输入学生成绩(0~100):105
输入超出范围,请输入 0 到 100 之间的数字。
请输入学生成绩(0~100):85
学生 张三 的成绩等级为:B
七、拓展建议(进阶练习)
如果你已经完成了上面的小项目,还可以尝试以下进阶任务来挑战自己:
- 自定义异常类:创建自己的异常类型,如
InvalidScoreError; - 日志记录:将异常信息记录到文件中,方便后续分析;
- 图形界面版本:使用
tkinter制作 GUI 版的异常处理程序; - 单元测试:为你的函数编写测试用例,确保其稳定性。
八、总结对比表格
| 关键词 | 作用 |
|---|---|
try | 包含可能引发异常的代码 |
except | 捕获并处理异常 |
else | 没有异常时执行 |
finally | 不论是否异常都执行 |
raise | 手动抛出异常 |
九、结语
学会了错误与异常处理之后,你就可以写出更加健壮、稳定的程序了。这不仅能提高用户体验,还能帮助你在开发中快速定位问题根源。
📌 建议:
- 多动手练习,尝试自己设计一些带有异常处理的小程序;
- 遇到异常不要慌张,学会阅读报错信息;
- 在关键位置添加异常处理逻辑,提升程序鲁棒性。
如果你喜欢这篇博文,别忘了点赞、收藏并分享给更多想学 Python 的朋友~有任何问题也欢迎留言讨论 😊
3268

被折叠的 条评论
为什么被折叠?



