目录

  1. 引言
  2. 错误与异常概述
  3. 常见的 Python 异常类型
    • 3.1 内建异常
    • 3.2 自定义异常
  4. 异常处理机制
    • 4.1 try/except
    • 4.2 elsefinally
  5. 异常链与重新抛出异常
  6. 常见错误与异常示例
  7. 总结
  8. 参考资料

1. 引言

在 Python 编程中,错误是指代码运行时发生的各种问题,而 异常 是指程序在运行过程中出现的错误情况。Python 提供了强大的异常处理机制,使得开发者能够捕获和处理这些异常,确保程序在异常发生时能够以优雅的方式继续运行。本文将深入探讨 Python 中的错误与异常,并展示如何有效地处理它们。


2. 错误与异常概述

Python 中的 错误 是指代码中出现的语法或逻辑问题,通常会导致程序无法正常执行。错误通常分为两种类型:

  • 语法错误(SyntaxError):代码本身存在语法问题,导致程序无法执行。
  • 运行时错误(RuntimeError):代码语法正确,但在程序运行过程中发生的问题,如除以零、索引越界等。

异常(Exception) 是程序在运行过程中可能出现的错误,Python 提供了丰富的异常类和处理机制来捕获和处理这些异常,防止程序崩溃。


3. 常见的 Python 异常类型

3.1 内建异常

Python 提供了多种内建的异常类型,用于描述不同类型的错误情况。以下是一些常见的异常类型:

异常类型描述
IndexError序列(如列表)索引越界
KeyError字典中访问一个不存在的键
TypeError操作或函数应用于不合适的对象类型
ValueError函数接收到的参数类型正确但值不合法
FileNotFoundError尝试打开一个不存在的文件
ZeroDivisionError除以零错误
AttributeError访问一个不存在的对象属性
NameError访问一个未定义的变量或函数

3.2 自定义异常

除了内建的异常类型,Python 允许开发者自定义异常类,继承自内建的 Exception 类。自定义异常通常用于描述特定业务逻辑中的错误情况。

class MyCustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)
        
try:
    raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
    print(f"Caught an error: {e}")


4. 异常处理机制

Python 提供了 tryexceptelsefinally 语句来处理异常。

4.1 try/except

try 块包含可能会抛出异常的代码,except 块用于捕获并处理异常。

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零")

4.2 elsefinally

  • else:如果没有发生异常,则执行 else 块中的代码。
  • finally:无论是否发生异常,finally 块中的代码始终会执行。
try:
    x = 10 / 2
except ZeroDivisionError:
    print("除以零错误")
else:
    print("没有发生错误,结果是:", x)
finally:
    print("这部分代码总是执行")


5. 异常链与重新抛出异常

在处理异常时,Python 允许将一个异常“链”到另一个异常,并通过 raise 重新抛出异常。这通常用于在捕获到异常时补充更多的上下文信息,或者将异常传递给外部调用者。

try:
    x = 10 / 0
except ZeroDivisionError as e:
    raise ValueError("发生了除以零错误") from e

此代码将捕获到的 ZeroDivisionError 异常链到一个新的 ValueError 异常中,提供更多的错误上下文。


6. 常见错误与异常示例

以下是一些常见错误和异常处理的示例:

示例 1: 除以零错误

try:
    num = 10 / 0
except ZeroDivisionError:
    print("错误:不能除以零")

示例 2: 索引越界

lst = [1, 2, 3]
try:
    print(lst[5])
except IndexError:
    print("错误:索引越界")

示例 3: 字典键错误

d = {'a': 1, 'b': 2}
try:
    print(d['c'])
except KeyError:
    print("错误:字典中没有该键")

示例 4: 自定义异常

class InvalidAgeError(Exception):
    def __init__(self, age):
        self.age = age
        self.message = f"年龄 {age} 无效"
        super().__init__(self.message)
        
def validate_age(age):
    if age < 0 or age > 120:
        raise InvalidAgeError(age)
    print("年龄有效")

try:
    validate_age(130)
except InvalidAgeError as e:
    print(e)


7. 总结

  • Python 的异常处理机制使得程序可以在发生错误时优雅地恢复,而不是直接崩溃。
  • 通过使用 tryexceptelsefinally,您可以精确地控制错误处理流程。
  • 自定义异常允许您根据具体的业务逻辑设计错误处理方案。
  • 重新抛出异常和异常链功能提供了更加灵活的异常处理方法,帮助开发者追踪和管理异常。

8. 参考资料

  1. Python 官方文档 – 错误和异常
  2. Real Python – Python Exception Handling
  3. W3Schools – Python Exceptions

站内链接