在Python编程中,异常处理是保障程序稳定运行的重要机制,当程序执行过程中出现错误时,合理的异常处理可以捕获错误并进行针对性处理,避免程序直接终止。Python提供了一套完整的异常处理语法,开发者可以根据实际需求灵活使用。

基本的异常处理结构try except
最常用的异常处理结构是try-except语句,基本语法如下:
try:
# 可能会抛出异常的代码块
result = 10 / 0
except ZeroDivisionError:
# 捕获到ZeroDivisionError异常时执行的代码
print("出现除零错误,无法计算")
在上面的代码中,try块中放置可能出现异常的代码,当执行到10 / 0时,会抛出ZeroDivisionError异常,此时程序会跳转到对应的except块执行处理逻辑,而不会直接崩溃。
如果需要捕获多种类型的异常,可以在except后面跟上异常类型的元组,也可以写多个except子句:
try:
num = int("abc")
result = 10 / num
except ValueError:
print("输入的字符串无法转换为整数")
except ZeroDivisionError:
print("除数不能为0")
except (TypeError, IndexError):
print("出现类型错误或索引错误")
else子句的使用
如果希望在try块中没有抛出异常时执行特定逻辑,可以添加else子句,else子句必须放在所有except子句之后:
try:
num = int("5")
result = 10 / num
except ValueError:
print("输入的字符串无法转换为整数")
except ZeroDivisionError:
print("除数不能为0")
else:
# try块没有抛出异常时执行
print(f"计算结果为:{result}")
finally子句的使用
finally子句用于定义无论是否发生异常都会执行的代码,通常用于释放资源,比如关闭文件、断开数据库连接等,finally子句必须放在所有except和else子句之后:
try:
file = open("test.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在")
finally:
# 无论是否出现异常,都会尝试关闭文件
if "file" in locals():
file.close()
print("文件已关闭")
主动抛出异常raise
除了被动捕获系统抛出的异常,开发者还可以使用raise语句主动抛出异常,通常用于参数校验等场景:
def divide(a, b):
if b == 0:
# 主动抛出ZeroDivisionError异常
raise ZeroDivisionError("除数不能为0")
return a / b
try:
divide(10, 0)
except ZeroDivisionError as e:
print(f"捕获到异常:{e}")
自定义异常类
如果系统内置的异常类型无法满足需求,还可以自定义异常类,自定义异常类需要继承自Exception类:
# 自定义异常类,继承自Exception
class MyCustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def check_age(age):
if age < 0 or age > 150:
raise MyCustomError("年龄必须在0到150之间")
return True
try:
check_age(200)
except MyCustomError as e:
print(f"自定义异常:{e.message}")
异常处理的常见注意事项
- 不要过度使用异常处理,对于可以提前预判的错误,比如参数类型校验,优先使用条件判断处理,而不是依赖异常捕获。
- 捕获异常时尽量指定具体的异常类型,不要直接使用
except:捕获所有异常,这样会隐藏很多潜在的问题,不利于调试。 finally子句中的代码会优先于return语句执行,如果try块中有return,finally中的代码还是会先执行完毕再返回结果。
掌握Python的异常处理机制后,就可以根据实际场景灵活组合使用不同的语法结构,让程序在面对错误时更加健壮,提升用户体验。
Python异常处理try_exceptfinallyraise修改时间:2026-07-07 16:21:30