第45集:异常处理基础:try-except
学习目标
- 理解异常的概念
- 掌握try-except语句的基本用法
- 学会捕获和处理异常
- 理解异常的类型
- 掌握异常处理的最佳实践
一、什么是异常?
异常是程序运行时发生的错误,会导致程序中断。
常见异常类型
| 异常类型 | 说明 |
|---|---|
| ZeroDivisionError | 除零错误 |
| ValueError | 值错误 |
| TypeError | 类型错误 |
| IndexError | 索引越界 |
| KeyError | 键不存在 |
| FileNotFoundError | 文件不存在 |
示例1:不使用异常处理
# ❌ 不处理异常,程序会崩溃
print(10 / 0) # ZeroDivisionError示例2:使用异常处理
# ✅ 使用try-except捕获异常
try:
print(10 / 0)
except ZeroDivisionError:
print("除数不能为零")二、try-except基本语法
语法结构
try:
# 可能出错的代码
pass
except 异常类型:
# 处理异常的代码
pass示例3:捕获除零错误
def divide(a, b):
"""除法函数"""
try:
result = a / b
return result
except ZeroDivisionError:
return "除数不能为零"
print(divide(10, 2)) # 输出:5.0
print(divide(10, 0)) # 输出:除数不能为零示例4:捕获多个异常
def safe_convert(value):
"""安全转换"""
try:
return int(value)
except ValueError:
return "无法转换为整数"
except TypeError:
return "类型错误"
print(safe_convert("123")) # 输出:123
print(safe_convert("abc")) # 输出:无法转换为整数
print(safe_convert([1, 2])) # 输出:类型错误示例5:捕获所有异常
try:
# 可能出错的代码
result = 10 / 0
except Exception as e:
# 捕获所有异常
print(f"发生异常:{e}")三、获取异常信息
示例6:获取异常详情
try:
print(10 / 0)
except ZeroDivisionError as e:
print(f"异常类型:{type(e)}")
print(f"异常信息:{e}")
print(f"异常描述:{e.__str__()}")示例7:使用traceback获取详细信息
import traceback
try:
print(10 / 0)
except Exception as e:
print("异常信息:", e)
print("\n详细堆栈信息:")
traceback.print_exc()四、else和finally
示例8:使用else
try:
result = 10 / 2
except ZeroDivisionError:
print("除数不能为零")
else:
# 没有异常时执行
print(f"计算成功,结果:{result}")示例9:使用finally
try:
f = open("file.txt", "r")
content = f.read()
except FileNotFoundError:
print("文件不存在")
finally:
# 无论是否异常都会执行
print("清理资源...")
# f.close()五、实际应用案例
案例:安全输入函数
def get_int_input(prompt):
"""安全获取整数输入"""
while True:
try:
value = int(input(prompt))
return value
except ValueError:
print("请输入有效的整数!")
age = get_int_input("请输入年龄:")
print(f"年龄:{age}")六、课后练习
练习1
编写一个除法函数,处理除零错误。
练习2
编写一个列表访问函数,处理索引越界错误。
练习3
编写一个字典访问函数,处理键不存在错误。
练习4
使用else和finally改进异常处理代码。
练习5
实现一个安全的用户输入函数,处理各种输入错误。