1. 异常的基本概念

  • 异常(Exception):在程序执行过程中,遇到非正常的或不可预见的状况(如除以零、文件不存在等),导致程序无法按照预期继续执行时,Python会抛出一个异常。
  • 抛出异常(Raise):当Python解释器检测到错误时,它会抛出一个异常。此外,开发者也可以使用raise语句手动抛出异常。
  • 捕获异常(Catch):使用try...except语句块可以捕获并处理异常。try块中放置可能引发异常的代码,except块则用于处理这些异常。

2. 常见的异常类型

Python定义了一系列标准异常,用于处理各种常见的错误情况。以下是一些常见的异常类型:

  • ZeroDivisionError:除数为零时引发。
  • ValueError:传入一个不适当的值(如范围外的值)给函数时引发。
  • TypeError:当操作或函数应用于不适当类型的对象时引发。
  • NameError:尝试访问一个未定义的变量时引发。
  • IndexError:尝试访问序列的索引超出其范围时引发。
  • KeyError:尝试访问字典中不存在的键时引发。
  • FileNotFoundError:尝试打开不存在的文件时引发(在Python 3.x中)。
  • IOError:输入输出错误(在Python 3.x中,IOError已被OSError取代,但IOError仍然可用作OSError的别名)。

3. 异常处理

基本的try...except结构
try:
    # 尝试执行的代码块
    result = 10 / 0
except ZeroDivisionError:
    # 处理ZeroDivisionError异常的代码块
    print("除数不能为0")
捕获多个异常
try:
    # 尝试执行的代码块
    pass
except (ZeroDivisionError, ValueError) as e:
    # 处理ZeroDivisionError或ValueError异常的代码块
    print(f"捕获到异常:{e}")
使用elsefinally
  • else块:如果没有异常发生,则执行else块中的代码。
  • finally块:无论是否发生异常,finally块中的代码都会被执行。通常用于资源清理,如关闭文件或释放锁。
try:
    # 尝试执行的代码块
    pass
except ZeroDivisionError:
    # 处理异常的代码块
    print("除数不能为0")
else:
    # 没有异常时执行的代码块
    print("一切正常")
finally:
    # 无论是否发生异常都会执行的代码块
    print("执行清理工作")

4. 自定义异常

Python允许通过继承内置的Exception类来创建自定义异常。

class MyCustomError(Exception):
    def __init__(self, message="这是一个自定义异常"):
        self.message = message
        super().__init__(self.message)

try:
    raise MyCustomError("出错了!")
except MyCustomError as e:
    print(e)

总结

异常处理是Python编程中不可或缺的一部分,它使程序更加健壮和易于维护。通过合理地使用try...except语句块,以及自定义异常,可以有效地控制程序在遇到错误时的行为,从而提高用户体验和程序的稳定性。

python学习总结之异常总结_自定义异常