在编程过程中,错误和异常是不可避免的。处理这些异常可以提高程序的稳定性和用户体验。本章将详细介绍 Python 中异常处理的基本概念、常见的异常类型、处理异常的方法以及如何自定义异常。

1. 异常的基本概念

什么是异常?

异常是程序执行过程中,出现的一种非正常情况。它会中断程序的正常流转。Python 提供了丰富的异常类型,帮助开发者识别和处理不同类型的错误。

常见的异常类型

以下是一些常见的 Python 异常类型:

  • IndexError: 当试图访问列表中不存在的索引时引发。
  • ValueError: 当函数接收到参数类型正确但值不合适时引发。
  • KeyError: 当访问不存在的字典键时引发。
  • TypeError: 当操作或函数应用于错误的数据类型时引发。
  • ZeroDivisionError: 当尝试除以零时引发。

2. 异常处理

Python 提供了 try-except 语句来捕获和处理异常,从而避免程序因异常而崩溃。

try-except 语句

基本结构

  1. try:
  2. # 可能引发异常的代码
  3. except 异常类型:
  4. # 异常处理代码

示例

  1. try:
  2. result = 10 / 0
  3. except ZeroDivisionError:
  4. print("除数不能为零!")

try-except-else 语句

try-except-else 语句在没有异常发生时执行 else 语句块中的代码。

结构

  1. try:
  2. # 可能引发异常的代码
  3. except 异常类型:
  4. # 异常处理代码
  5. else:
  6. # 如果没有发生异常,则执行这部分代码

示例

  1. try:
  2. result = 10 / 2
  3. except ZeroDivisionError:
  4. print("除数不能为零!")
  5. else:
  6. print("计算成功,结果是:", result)

try-except-finally 语句

finally 语句块中的代码无论是否发生异常都会执行,通常用于释放资源或进行清理操作。

结构

  1. try:
  2. # 可能引发异常的代码
  3. except 异常类型:
  4. # 异常处理代码
  5. finally:
  6. # 无论是否发生异常,都会执行这部分代码

示例

  1. try:
  2. file = open("example.txt", "r")
  3. content = file.read()
  4. except FileNotFoundError:
  5. print("文件未找到!")
  6. finally:
  7. file.close()

3. 自定义异常

在某些情况下,我们可能需要创建自己的异常类,以便更准确地捕获和处理特定错误。

创建自定义异常类

自定义异常类应继承自 Exception 基类。

示例

  1. class CustomError(Exception):
  2. """自定义异常类"""
  3. pass
  4. def check_value(value):
  5. if value < 0:
  6. raise CustomError("值不能为负数!")
  7. try:
  8. check_value(-1)
  9. except CustomError as e:
  10. print("捕获到自定义异常:", e)

在代码中使用自定义异常

通过自定义异常,我们可以在特定条件下引发异常,并在 try-except 块中捕获这些异常。

示例

  1. class AgeError(Exception):
  2. """年龄异常类"""
  3. pass
  4. def validate_age(age):
  5. if age < 0 or age > 150:
  6. raise AgeError("年龄必须在 0 到 150 之间!")
  7. try:
  8. validate_age(200)
  9. except AgeError as e:
  10. print("捕获到年龄异常:", e)

小结

通过本章的学习,我们掌握了 Python 中异常处理的基本概念和方法,包括使用 try-except 语句捕获异常、使用 finally 语句进行清理操作,以及创建和使用自定义异常。这些知识对于编写健壮的 Python 程序至关重要。

如有问题或建议,欢迎在评论区留言讨论。