Python 基础:异常处理
6.1 基础 try-except
python
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"除零错误: {e}")
except Exception as e:
print(f"其他错误: {e}")
else:
print("没有异常时执行")
finally:
print("无论是否有异常都执行")1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
6.2 常见异常类型
| 异常类型 | 说明 |
|---|---|
ZeroDivisionError | 除零 |
TypeError | 类型错误 |
ValueError | 值错误 |
KeyError | 字典键不存在 |
IndexError | 索引越界 |
FileNotFoundError | 文件不存在 |
AttributeError | 属性不存在 |
6.3 主动抛出异常
python
def validate_age(age):
if age < 0:
raise ValueError("年龄不能为负")
if age > 150:
raise ValueError("年龄不合理")
return age
try:
validate_age(-5)
except ValueError as e:
print(f"验证失败: {e}")1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
6.4 自定义异常
python
class ValidationError(Exception):
"""验证错误"""
pass
def login(username, password):
if username != "admin":
raise ValidationError("用户名错误")
if password != "123456":
raise ValidationError("密码错误")
return True1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
6.5 异常捕获的陷阱
python
# ❌ 裸 except(捕获所有异常,可能隐藏bug)
try:
risky_operation()
except:
pass
# ✅ 明确指定异常类型
try:
risky_operation()
except (ValueError, TypeError) as e:
print(f"参数错误: {e}")
except Exception as e:
print(f"未知错误: {e}")
raise # 重新抛出未处理的异常1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
[[返回 Python 首页|python/index]]