异常
理解异常的概念与作用
掌握 try-except 异常处理结构
了解常见异常类型与 finally 的用法
核心讲解
(1)什么是异常
程序运行时出现的错误,会导致程序崩溃终止。比如除零错误、索引越界、文件不存在、类型错误等,都是异常。 异常处理就是让程序出错时不会直接崩溃,而是优雅地处理错误,继续运行。
(2)基本语法
try:
可能出错的代码
except 异常类型:
出错时执行的代码
程序执行 try 里的代码,如果出错了,就跳去执行 except 里的代码,不会崩溃;如果没出错,就跳过 except。
(3)进阶结构
多 except:可以捕获多种不同的异常,分别处理
else:没有异常时执行的代码
finally:无论有没有异常,最后一定会执行的代码,常用于释放资源
(4)常见异常类型
ZeroDivisionError:除零错误IndexError:索引越界KeyError:字典键不存在TypeError:类型错误ValueError:值错误FileNotFoundError:文件不存在Exception:所有异常的父类,可以捕获所有异常
代码示例
# 1. 基础异常处理
print("=== 除法计算器 ===")
try:
num1 = float(input("请输入被除数:"))
num2 = float(input("请输入除数:"))
result = num1 / num2
print("结果:", result)
except ZeroDivisionError:
print("错误:除数不能为零")
except ValueError:
print("错误:请输入有效的数字")
# 2. 完整结构
try:
f = open("test.txt", "r", encoding="utf-8")
content = f.read()
print(content)
except FileNotFoundError:
print("文件不存在")
except Exception as e:
print(f"发生了其他错误:{e}")
else:
print("读取成功")
finally:
# 无论是否出错,都关闭文件
f.close()
print("文件已关闭")
# 3. 主动抛出异常
def check_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
print("年龄合法")
try:
check_age(-5)
except ValueError as e:
print(e)
常见误区
捕获太宽泛:直接用 Exception 捕获所有异常,会隐藏真正的问题,尽量捕获具体的异常
空的 except:只写 except 不做任何处理,出错了也不知道,不利于排查
滥用异常处理:能用判断避免的错误,就不要用异常处理,异常只处理意外情况
finally 里写 return:finally 里的 return 会覆盖 try 里的返回值,要注意
课后练习
编写程序,让用户输入列表索引,输出对应元素,用异常处理索引越界的情况
编写读取文件的程序,用 finally 确保文件一定被关闭
写一个函数,接收分数,如果分数不在 0-100 之间就主动抛出异常

