为什么要处理异常?
程序在运行过程中难免会遇到错误——文件不存在、网络超时、类型转换失败等。良好的异常处理能让程序更健壮。
try-except 基本语法
try:
result = 10 / 0
except ZeroDivisionError:
print('除数不能为零!')
捕获多种异常
try:
num = int('abc')
except (ValueError, TypeError) as e:
print(f'转换失败: {e}')
else 和 finally
try:
file = open('data.txt', 'r')
except FileNotFoundError:
print('文件不存在')
else:
content = file.read()
finally:
file.close()
主动抛出异常
def check_age(age):
if age < 0:
raise ValueError('年龄不能为负数')
if age < 18:
raise PermissionError('未成年人不能注册')
return True
自定义异常
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(message)
try:
raise CustomError('这是自定义异常')
except CustomError as e:
print(f'捕获到: {e.message}')
常见异常类型
| 异常 | 触发场景 |
|---|---|
| ValueError | 参数值不正确 |
| TypeError | 类型不正确 |
| KeyError | 字典键不存在 |
| IndexError | 索引越界 |
| FileNotFoundError | 文件不存在 |
| ZeroDivisionError | 除数为零 |
| TimeoutError | 操作超时 |
总结
掌握异常处理是写出健壮代码的关键。原则是:能捕获就捕获,能不抛就不抛,抛了就要处理。