异常处理
异常处理是 Python 编程中的重要概念之一,用于捕获和处理程序运行时可能出现的错误。通过合理的异常处理,程序可以避免因错误而中断,从而提升代码的健壮性和用户体验。本节将介绍异常的基本概念、常见的异常类型以及如何使用异常处理机制来编写健壮的 Python 程序。
1. 什么是异常
异常是程序运行时发生的错误,当 Python 解释器遇到异常时,会中断程序的执行,并显示错误信息。如果我们希望程序在出现异常时能够优雅地处理,就需要进行异常捕获和处理。
常见的异常类型包括:
ZeroDivisionError
:除数为 0 时引发的异常。FileNotFoundError
:尝试访问不存在的文件时引发的异常。IndexError
:访问列表或元组中不存在的索引时引发的异常。KeyError
:访问字典中不存在的键时引发的异常。TypeError
:数据类型不匹配时引发的异常。
2. 使用 try-except
语句
可以使用 try-except
语句捕获异常,并防止程序因异常而崩溃。try
块中的代码会被尝试执行,如果引发异常,则跳转到对应的 except
块进行处理。
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print(f"结果是: {result}")
except ZeroDivisionError:
print("错误:除数不能为 0!")
except ValueError:
print("错误:请输入有效的整数!")
2.1 捕获多个异常
在同一个 try
语句中,可以捕获多个不同类型的异常。每个 except
块对应不同的异常类型。
try:
value = int(input("请输入一个整数: "))
result = 10 / value
print(f"结果是: {result}")
except (ZeroDivisionError, ValueError) as e:
print(f"发生错误: {e}")
3. 使用 else
语句
如果 try
块中的代码没有引发异常,则会执行 else
块中的代码。
try:
value = int(input("请输入一个整数: "))
result = 10 / value
except ZeroDivisionError:
print("错误:除数不能为 0!")
except ValueError:
print("错误:请输入有效的整数!")
else:
print(f"结果是: {result}")
4. 使用 finally
语句
finally
块中的代码无论是否引发异常,都会执行,通常用于释放资源,如关闭文件或网络连接。
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError:
print("错误:文件未找到!")
finally:
file.close()
print("文件已关闭")
5. 自定义异常
Python 允许我们自定义异常类,并在程序中引发自定义的异常。自定义异常类需要继承自 Exception
类。
class CustomError(Exception):
"""自定义异常类"""
def __init__(self, message):
self.message = message
# 在程序中引发自定义异常
def check_value(value):
if value < 0:
raise CustomError("值不能为负数!")
else:
print(f"输入值是: {value}")
try:
check_value(-5)
except CustomError as e:
print(f"捕获到自定义异常: {e.message}")
6. raise
关键字
raise
关键字可以显式地引发异常,无论是内置异常还是自定义异常。
def divide(a, b):
if b == 0:
raise ZeroDivisionError("除数不能为 0!")
return a / b
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(f"捕获到异常: {e}")
7. assert
语句
assert
语句用于在程序中插入调试断言。它检查一个条件,如果条件为 False
,则引发 AssertionError
异常。
def calculate_square_root(x):
assert x >= 0, "输入必须是非负数"
return x ** 0.5
print(calculate_square_root(25)) # 正常输出:5.0
print(calculate_square_root(-4)) # 引发 AssertionError
8. 小结
异常处理是编写健壮 Python 程序的重要工具。通过合理使用 try-except
语句,我们可以有效捕获并处理程序运行中的错误,避免程序崩溃。同时,使用 finally
语句保证资源的释放,通过 assert
和自定义异常提升代码的可维护性。掌握异常处理技巧能够帮助我们编写更稳定、可靠的代码。