企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

python进阶-Day 3:异常处理与调试

wudianyun 2025-04-24 09:21:58 精选文章 12 ℃

以下是Python进阶第3天学习任务的示例代码,包含try-except-else-finally的完整用法、调试技巧说明,并实现一个文件读取程序来处理各种异常情况。我会在代码中添加详细的注释,帮助理解每部分的功能。

python

# 示例代码:文件读取程序,处理各种异常情况

# 导入必要的模块
import os  # 用于文件路径操作

def read_file(file_path):
    """
    读取文件内容并处理可能出现的异常
    参数:
        file_path (str): 文件路径
    返回:
        str: 文件内容(如果成功读取)
    """
    file_handle = None  # 文件句柄初始化
    try:
        # 尝试打开并读取文件
        file_handle = open(file_path, 'r', encoding='utf-8')  # 使用utf-8编码打开文件
        content = file_handle.read()  # 读取文件内容
        if not content:
            raise ValueError("文件内容为空")  # 自定义异常:如果文件为空则抛出

    except FileNotFoundError as e:
        # 处理文件不存在的异常
        print(f"错误:文件 '{file_path}' 不存在。详细信息:{e}")
        return None

    except PermissionError as e:
        # 处理权限不足的异常
        print(f"错误:无权限访问文件 '{file_path}'。详细信息:{e}")
        return None

    except UnicodeDecodeError as e:
        # 处理文件编码错误的异常
        print(f"错误:文件 '{file_path}' 编码错误,无法读取。详细信息:{e}")
        return None

    except ValueError as e:
        # 处理自定义异常(文件为空)
        print(f"错误:{e}")
        return None

    except Exception as e:
        # 处理其他未预料到的异常
        print(f"未知错误:{e}")
        return None

    else:
        # 如果没有异常发生,执行此块
        print("文件读取成功!")
        return content

    finally:
        # 无论是否发生异常,此块都会执行
        if file_handle is not None:
            file_handle.close()  # 确保文件句柄被关闭
            print(f"文件 '{file_path}' 已关闭。")

# 测试函数
def main():
    # 测试用例1:正常文件
    print("\n测试1:读取正常文件")
    result = read_file("test.txt")  # 假设test.txt存在且有内容
    if result:
        print(f"文件内容:{result}")

    # 测试用例2:不存在的文件
    print("\n测试2:读取不存在的文件")
    read_file("non_existent_file.txt")

    # 测试用例3:空文件
    print("\n测试3:读取空文件")
    with open("empty.txt", "w") as f:  # 创建一个空文件
        pass  # 不写入任何内容
    read_file("empty.txt")

# 调试示例:使用pdb进行调试
if __name__ == "__main__":
    # 如果需要调试,可以取消注释以下代码
    # import pdb
    # pdb.set_trace()  # 设置断点,运行时进入调试模式
    main()

"""
调试技巧说明:
1. 使用pdb:
   - 在代码中插入 `import pdb; pdb.set_trace()` 设置断点
   - 运行程序后,使用命令:
     - n (next): 单步执行下一行
     - s (step): 进入函数内部
     - c (continue): 继续运行直到下一个断点
     - p 变量名: 查看变量值
     - q (quit): 退出调试

2. 使用IDE(如PyCharm、VSCode):
   - 设置断点:点击代码行左侧添加红点
   - 运行调试模式:F5(启动)、F10(步过)、F11(步入)
   - 查看变量:调试窗口会显示当前作用域内的变量值
   - 条件断点:右键断点设置触发条件
"""

代码说明

  1. try-except-else-finally 用法:
  2. try: 尝试执行可能抛出异常的代码(文件打开和读取)。
  3. except: 捕获并处理特定异常(如文件不存在、权限错误、编码错误等)。
  4. else: 如果没有异常发生,执行此块(表示文件读取成功)。
  5. finally: 无论是否发生异常,都会执行(确保文件关闭)。
  6. 异常类型:
  7. FileNotFoundError: 文件不存在。
  8. PermissionError: 无权限访问文件。
  9. UnicodeDecodeError: 文件编码错误。
  10. ValueError: 自定义异常,文件内容为空。
  11. Exception: 通用的“兜底”异常,用于捕获未预料的情况。
  12. 调试技巧:
  13. 代码中提供了使用pdb的基本方法,注释中详细说明了常用命令。
  14. 还介绍了IDE调试的通用步骤,适用于PyCharm或VSCode。
  15. 测试用例:
  16. 测试正常文件读取。
  17. 测试不存在的文件。
  18. 测试空文件(通过程序创建并读取)。

如何运行和测试

  1. 保存代码为day3.py。
  2. 确保当前目录下有一个test.txt文件(例如,写入一些内容如“Hello, Python!”)。
  3. 运行程序:python day3.py,观察输出结果。
  4. 如果需要调试,取消注释pdb相关代码,运行后进入交互式调试模式。
最近发表
标签列表