Python3 异常处理
代码正常按顺序执行时,如果遇到错误、无法继续运行,程序就会抛出异常,直接崩溃终止。
# 代码会报错并停止运行
num = int("abc")
print("代码继续往下走")运行结果:程序直接报错,后面 print 根本不会执行。
异常处理的作用:提前预判可能出错的代码,就算报错,程序也不会崩溃,还能自定义提示、做补救逻辑。
异常处理
核心语法:try...except
try:
num = int("abc")
print("转换成功")
except:
print("代码出错啦!字符串不能转为数字")
# 异常被捕获,程序继续运行
print("程序没有崩溃,继续执行...")
捕获指定异常
上面 except: 会捕获所有异常,适合简单场景。实际开发中,我们会区分错误类型,不同错误做不同处理。
常见异常
| 异常类型 | 说明 | 触发场景 |
| ValueError | 值错误 | 字符串转数字失败、格式不匹配 |
| ZeroDivisionError | 除零错误 | 分母为 0 |
| IndexError | 索引错误 | 列表 / 字符串下标越界 |
| KeyError | 键错误 | 字典中不存在某个 key |
| FileNotFoundError | 文件不存在 | 打开一个没有的文件 |
| TypeError | 类型错误 | 不同类型数据运算(如数字 + 字符串) |
捕获指定异常
try:
a = 10 / 0 # 除以0,触发 ZeroDivisionError
except ZeroDivisionError:
print("错误:除数不能为 0!")多个异常分开处理
try:
data = "hello"
num = int(data) # 可能触发 ValueError
res = 10 / 0 # 可能触发 ZeroDivisionError
except ValueError:
print("错误:数据无法转为数字")
except ZeroDivisionError:
print("错误:除数不能为 0")一次性捕获多种异常
try:
lst = [1,2,3]
print(lst[10]) # 索引越界
except (IndexError, ValueError):
print("出现数值错误 或 索引错误")获取异常信息
想要看到系统原生的错误描述,可以在 except 后接收异常对象:
try:
num = int("python")
except ValueError as e:
# e 就是异常信息对象
print("捕获到异常:", e)
#输出 捕获到异常: invalid literal for int() with base 10: 'python'
异常处理完整组合
语法:try + except + else + finally
try:
# 风险代码
except 异常类型:
# 出错执行
else:
# 【可选】代码**没有报错**时,才会执行
finally:
# 【可选】无论代码是否报错,**一定会执行**else 用法
try:
num = int("123")
except ValueError:
print("转换失败")
else:
# 代码正常运行,走到这里
print("转换成功,数字是:", num)finally 用法
典型场景:关闭文件、关闭数据库连接、释放资源,无论是否报错,资源必须关闭。
try:
f = open("test.txt", "r")
content = f.read()
except FileNotFoundError:
print("文件不存在")
finally:
# 不管文件是否存在,都会执行
print("执行收尾操作")主动抛出异常:raise
有时候代码本身没报错,但业务逻辑不合法(比如年龄负数),我们可以手动抛出异常,中断流程。
age = -5
if age < 0:
# 主动抛出异常
raise ValueError("年龄不能为负数")
更新时间:2026-06-16 14:59:28
阅读量:3