Python中的异常处理机制通过捕获程序运行时的错误,避免错误直接导致程序终止,而try-except块是实现这一机制的核心结构,通过特定语法可以捕获并处理不同类型的异常。

Python异常处理的基本实现
Python的异常处理基本结构由try、except、else、finally四个子句组成,其中try和except是必需部分,else和finally为可选部分。try块中放置可能出现异常的代码,当try块中的代码触发异常时,程序会跳转到对应的except块执行处理逻辑;如果try块代码正常执行没有异常,则不会执行except块内容。
基础的try-except语法结构如下:
try:
# 可能出现异常的代码
result = 10 / 0
except ZeroDivisionError:
# 处理除零异常的逻辑
print("除数不能为0")
try-except块的常见用法
1. 捕获指定类型的异常
可以在except后面指定具体的异常类型,只捕获对应类型的异常,这样能更精准地处理错误,避免误捕获其他不相关的异常。常见的内置异常类型有ZeroDivisionError(除零错误)、TypeError(类型错误)、ValueError(值错误)、FileNotFoundError(文件未找到错误)等。
示例:捕获类型错误和值错误
try:
num = int("abc")
except ValueError:
print("输入的字符串无法转换为整数")
2. 捕获多种类型的异常
如果需要同时捕获多种不同类型的异常,可以在except后面用括号包裹多个异常类型,也可以写多个except子句分别处理不同类型的异常。
方式一:单个except捕获多个异常
try:
data = [1, 2, 3]
print(data[5])
except (IndexError, TypeError):
print("索引错误或者类型错误")
方式二:多个except子句分别处理
try:
file = open("test.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有文件读取权限")
3. 捕获所有异常
如果不指定异常类型,直接使用except:,可以捕获所有类型的异常,但这种方式不推荐在生产环境大量使用,因为会捕获包括系统退出、键盘中断等在内的所有异常,不利于排查问题。更推荐的方式是捕获Exception类,它可以捕获绝大多数常见的程序异常,同时不会捕获系统级的特殊异常。
try:
import non_exist_module
except Exception as e:
# 可以通过as关键字获取异常对象,查看异常信息
print(f"捕获到异常:{e}")
4. 搭配else子句使用
else子句放在所有except子句之后,当try块中的代码没有触发任何异常时,会执行else块中的内容,通常用于放置try块代码正常执行后需要处理的后续逻辑。
try:
num1 = 10
num2 = 2
result = num1 / num2
except ZeroDivisionError:
print("除数不能为0")
else:
print(f"计算结果为:{result}")
5. 搭配finally子句使用
finally子句无论try块是否触发异常,也无论except块是否执行,都会被执行,通常用于释放资源,比如关闭打开的文件、断开数据库连接等。
file = None
try:
file = open("test.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("文件不存在")
finally:
if file:
file.close()
print("文件已关闭")
6. 自定义异常并抛出
除了捕获内置异常,还可以自定义异常类,通过raise关键字主动抛出异常,在try-except块中捕获自定义异常进行处理。
# 自定义异常类,继承Exception
class AgeError(Exception):
pass
def check_age(age):
if age < 0 or age > 150:
raise AgeError("年龄必须在0到150之间")
return age
try:
check_age(200)
except AgeError as e:
print(f"年龄校验失败:{e}")
使用try-except的注意事项
- 不要把所有代码都放在try块中,只需要将可能出现异常的代码放入,避免异常捕获逻辑过于笼统
- 捕获异常后尽量做有意义的处理,不要只写pass空语句,不利于后续问题排查
- 不要在except块中再次抛出不相关的异常,保持异常处理的逻辑清晰
Python异常处理try-except异常捕获修改时间:2026-06-12 05:39:25