Python异常处理操作举例详细教程

作者:

文章目录
  • ✅ 推荐做法 具体异常捕获优先 添加有意义的错误信息 raise ValueError(f”无效参数值: {value}”) 日志记录异常 import logging try: process() except Exception: logging.exception(“处理失败”) ⚠️ 避免陷阱 捕获过于宽泛的异常 try: … except: # 捕获所有异常,包括KeyboardInterrupt pass 忽略异常 try: … except Exception: pass # 静默失败 重复抛出异常 try: … except Exception as e: print(e) raise # 保留原始堆栈信息
  • 网络请求重试机制 import requests from time import sleep def fetch_data(url, retries=3): for attempt in range(retries): try: response = requests.get(url, timeout=5) response.raise_for_status() return response.json() except requests.HTTPError as e: print(f”HTTP错误: {e}”) except requests.Timeout: print(“请求超时”) except requests.RequestException: print(“网络连接问题”) if attempt < retries – 1: sleep(2 ** attempt) # 指数退避 raise Exception(f”请求失败,已重试{retries}次”) # 使用示例 data = fetch_data(“https://api.example.com/data”) 通过掌握这些异常处理技巧,您可以: 编写更健壮的程序 提高错误诊断效率 创建更友好的用户交互体验 构建可维护的异常处理体系 建议在实际开发中结合具体业务场景,设计合理的异常处理策略,并定期审查异常处理代码的有效性
  • 到此这篇关于Python异常处理操作的文章就介绍到这了,更多相关Python异常处理内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python 异常处理实例详解 Python异常处理总结 python中的五种异常处理机制介绍 Python标准异常和异常处理详解 解析Python中的异常处理 python中异常报错处理方法汇总 Python常见异常分类与处理方法 Python异常处理例题整理 Python同时处理多个异常的方法
  • 目录
    • 一、异常处理基础
      • 1. 基本语法结构
    • 二、常见异常类型
      • 1. 内置异常层次
      • 2. 常见异常示例
    • 三、多重异常处理
      • 1. 合并捕获
      • 2. 分层处理
    • 四、finally与else子句
      • 1. finally 应用场景
      • 2. else 使用技巧
    • 五、自定义异常
      • 1. 创建异常类
      • 2. 异常继承体系
    • 六、异常链与上下文
      • 1. raise from 语法
      • 2. 异常上下文查看
    • 七、最佳实践与陷阱
      • 综合实战案例
        • 总结

          try:
              # 可能引发异常的代码
              result = 10 / 0
          except ZeroDivisionError:
              # 处理特定异常
              print("不能除以零!")
          except Exception as e:
              # 通用异常处理
              print(f"发生错误: {e}")
          else:
              # 无异常时执行
              print("计算成功")
          finally:
              # 始终执行的清理代码
              print("清理资源")
          
          • 异常传播机制

          所有异常类都继承 BaseException

          BaseException
           ├── KeyboardInterrupt
           ├── SystemExit
           └── Exception
                ├── ArithmeticError
                │    ├── ZeroDivisionError
                │    └── FloatingPointError
                ├── LookupError
                │    ├── IndexError
                │    └── KeyError
                ├── OSError
                │    ├── FileNotFoundError
                │    └── PermissionError
                └── ValueError
          

          # 文件操作
          try:
              with open("nonexist.txt") as f:
                  content = f.read()
          except FileNotFoundError:
              print("文件不存在")
          
          # 类型转换
          try:
              num = int("abc")
          except ValueError:
              print("无效的数字格式")
          
          # 字典操作
          d = {"key": "value"}
          try:
              print(d["missing"])
          except KeyError:
              print("键不存在")
          

          try:
              # 可能抛出多种异常的代码
          except (TypeError, ValueError) as e:
              print(f"输入类型错误: {e}")
          

          try:
              data = json.loads(invalid_json)
          except json.JSONDecodeError:
              print("JSON解析失败")
          except Exception:
              print("其他未知错误")
          

          file = None
          try:
              file = open("data.txt", "r")
              process(file)
          except IOError:
              print("文件操作错误")
          finally:
              if file:
                  file.close()  # 确保资源释放
          

          try:
              result = risky_operation()
          except NetworkError:
              handle_error()
          else:
              save_result(result)  # 仅在成功时执行
          

          class InvalidEmailError(ValueError):
              """自定义邮箱格式异常"""
              def __init__(self, email):
                  super().__init__(f"无效邮箱格式: {email}")
                  self.email = email
          
          # 使用示例
          email = "user@"
          if "@" not in email or "." not in email.split("@")[1]:
              raise InvalidEmailError(email)
          

          class DatabaseError(Exception):
              """数据库操作基类异常"""
          
          class ConnectionError(DatabaseError):
              """数据库连接异常"""
          
          class QueryError(DatabaseError):
              """SQL查询异常"""
          

          try:
              config = load_config()
          except FileNotFoundError as e:
              raise RuntimeError("配置加载失败") from e
          

          try:
              # 可能出错的代码
          except Exception as e:
              print("原始异常:", e.__cause__)
              print("上下文:", e.__context__)
          

          ✅ 推荐做法

          • 具体异常捕获优先
          • 添加有意义的错误信息
          raise ValueError(f"无效参数值: {value}")
          
          • 日志记录异常
          import logging
          try:
              process()
          except Exception:
              logging.exception("处理失败")
          

          ⚠️ 避免陷阱

          • 捕获过于宽泛的异常
          try:
              ...
          except:  # 捕获所有异常,包括KeyboardInterrupt
              pass
          
          • 忽略异常
          try:
              ...
          except Exception:
              pass  # 静默失败
          
          • 重复抛出异常
          try:
              ...
          except Exception as e:
              print(e)
              raise  # 保留原始堆栈信息
          

          网络请求重试机制

          import requests
          from time import sleep
          
          def fetch_data(url, retries=3):
              for attempt in range(retries):
                  try:
                      response = requests.get(url, timeout=5)
                      response.raise_for_status()
                      return response.json()
                  except requests.HTTPError as e:
                      print(f"HTTP错误: {e}")
                  except requests.Timeout:
                      print("请求超时")
                  except requests.RequestException:
                      print("网络连接问题")
                  
                  if attempt < retries - 1:
                      sleep(2 ** attempt)  # 指数退避
              raise Exception(f"请求失败,已重试{retries}次")
          
          # 使用示例
          data = fetch_data("https://api.example.com/data")
          

          通过掌握这些异常处理技巧,您可以:

          • 编写更健壮的程序
          • 提高错误诊断效率
          • 创建更友好的用户交互体验
          • 构建可维护的异常处理体系

          建议在实际开发中结合具体业务场景,设计合理的异常处理策略,并定期审查异常处理代码的有效性

          到此这篇关于Python异常处理操作的文章就介绍到这了,更多相关Python异常处理内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

          您可能感兴趣的文章:

          • Python 异常处理实例详解
          • Python异常处理总结
          • python中的五种异常处理机制介绍
          • Python标准异常和异常处理详解
          • 解析Python中的异常处理
          • python中异常报错处理方法汇总
          • Python常见异常分类与处理方法
          • Python异常处理例题整理
          • Python同时处理多个异常的方法

          站内搜索