Python中web错误处理与异常捕获示例详解

作者:

文章目录
  • 在 Web 开发中,错误处理与异常捕获是保障服务稳定性和用户体验的核心机制: 核心目标: 防止服务崩溃:捕获未处理的异常,避免因单个请求错误导致整个服务不可用。 友好用户提示:向客户端返回有意义的错误信息(如 404 页面、500 错误页)。 日志记录:记录异常堆栈信息,便于调试和问题追踪。 常见场景: 数据库操作失败(如连接超时、SQL 语法错误)。 外部 API 调用异常(如网络中断、响应格式错误)。 用户输入校验失败(如参数缺失、类型不匹配)。 HTTP 错误码关联: 4xx:客户端错误(如 400 Bad Request、404 Not Found)。 5xx:服务端错误(如 500 Internal Server Error)。
  • try 语句是 Python 中处理异常的基础工具,在 Web 开发中用于保护可能出错的代码块。
  • 问题 解决方案 代码示例 数据库连接泄漏 使用 contextlib 管理连接 with database_connection() as conn: CSRF/XSS攻击 启用框架内置保护(如Django的csrf_token) <form>{% csrf_token %}</form> 文件上传超限 捕获 RequestEntityTooLarge 异常 except RequestEntityTooLarge: … 第三方API超时 设置超时 + 重试机制 requests.get(url, timeout=5)
  • 场景 工具/方法 代码块级错误处理 try-except + 具体异常类型捕获 全局异常统一响应 框架错误处理器(如 @errorhandler) 自定义错误类型 继承 Exception 定义业务异常类 日志记录 logging 模块记录堆栈信息 异步错误处理 asyncio 任务 + 异常回调 到此这篇关于Python中web错误处理与异常捕获的文章就介绍到这了,更多相关Python web错误处理内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python 错误和异常小结 Python 错误和异常代码详解 Python错误和异常总结详细  Python错误与异常处理 Python基础教程之错误和异常的处理方法 Python常遇到的错误和异常 Python基础之语法错误和异常详解
  • 目录
    • 一、概述
      • 核心原则
    • 二、try 语句
      • 1.基础语法
        • 常见异常类型
        • 一句话总结
      • 2. 示例:捕获常见异常
      • 常见问题解决方案
        • 总结

          在 Web 开发中,错误处理与异常捕获是保障服务稳定性和用户体验的核心机制:

          • 核心目标

            • 防止服务崩溃:捕获未处理的异常,避免因单个请求错误导致整个服务不可用。

            • 友好用户提示:向客户端返回有意义的错误信息(如 404 页面、500 错误页)。

            • 日志记录:记录异常堆栈信息,便于调试和问题追踪。

          • 常见场景

            • 数据库操作失败(如连接超时、SQL 语法错误)。

            • 外部 API 调用异常(如网络中断、响应格式错误)。

            • 用户输入校验失败(如参数缺失、类型不匹配)。

          • HTTP 错误码关联

            • 4xx:客户端错误(如 400 Bad Request404 Not Found)。

            • 5xx:服务端错误(如 500 Internal Server Error)。

          • 防崩溃:捕获所有未处理异常,避免服务中断。

          • 明日志:记录异常堆栈,便于调试。

          • 友好响应:返回用户易懂的错误信息,隐藏敏感细节。

          try 语句是 Python 中处理异常的基础工具,在 Web 开发中用于保护可能出错的代码块。

          try:  
              # 可能引发异常的代码(如数据库操作、文件读写)  
              risky_operation()  
          except ExceptionType as e:  
              # 捕获特定异常并处理  
              handle_error(e)  
          else:  
              # 无异常时执行(可选)  
              clean_up()  
          finally:  
              # 无论是否异常都执行(如释放资源)  
              release_resources()  
          代码块 用途 执行条件 最佳实践
          try 包裹可能引发异常的代码 总是执行 仅包含可能出错的代码,避免冗余逻辑。
          except 捕获并处理特定异常 当 try 块发生异常时 优先捕获具体异常类型,避免裸露的 except
          else 执行无异常时的后续逻辑 try 块无异常时执行 用于分离正常流程和异常处理代码。
          finally 无论是否异常都执行的清理操作 总是执行 释放资源(如关闭文件、数据库连接)。

          异常 触发场景
          FileNotFoundError 文件不存在时尝试读取(如 open("r"))。
          PermissionError 无权限访问文件(如只读文件尝试写入)。
          IsADirectoryError 尝试以文件模式操作目录。
          UnicodeDecodeError 文本文件编码不匹配(如用 utf-8 读取 gbk 文件)。

          try 防崩溃,except 抓异常,else 走正路,finally 清战场。

          import requests
          from requests.exceptions import RequestException, Timeout, HTTPError
          
          try:
              #发送 GET 请求,并设置超时时间为 5 秒
              response = requests.get('https://www.example.com', timeout=5)
              
              #如果状态码不是 200, 抛出 HTTPError 异常
              response.raise_for_status ()      # 如果状态码是 404 或 500, 抛出异常
              
              #如果请求成功,则输出响应内容
              print('Response Body:', response.text)
             
               #捕获请求超时异常
              except Timeout:
                  print('Request timed out')
              #捕获 HTTP 错误 (如状态码 404、500 等)
              except HTTPError as http_err:
                  print(f'HTTP error occurred: {http_err}')
              
              #捕获其他网络相关的错误
              except RequestException as req_err:
                  print(f'Request error occurred: {req_err}')
              #可以在 finally 块中清理资源 (如关闭文件或连接)
              finally:
                  print('Request attempt completed.')

          代码解释: 

          1. try 块:首先发起 HTTP 请求,设置超时时间为 5 秒,并使用 response.raise_for_status () 来检查响应的状态码。如果服务器返回了错误的状态码 (如 404、500), raise_for_status () 会抛出 HTTPError 异常。
          2. except 块:
            • Timeout: 如果请求超时 (超过设置的 5 秒), 程序会捕获到 Timeout 异常,并打印 “Request timed out”。
            • HTTPError: 如果响应的状态码表明出现 HTTP 错误 (例如 404 表示未找到页面), 程序会捕获到 HTTPError 异常,并打印相关错误信息。
            • RequestException: 捕获其他类型的网络相关错误 (如连接问题、DNS 解析失败等)。RequestException 是所有 requests 库异常的基类,可以捕获任何 requests 库抛出的异常。
          3. finally 块: finally 中的代码无论是否发生异常都会被执行,通常用于释放资源或做一些收尾工作。”Request attempt completed“   表示请求结束

          问题 解决方案 代码示例
          数据库连接泄漏 使用 contextlib 管理连接 with database_connection() as conn:
          CSRF/XSS攻击 启用框架内置保护(如Django的csrf_token <form>{% csrf_token %}</form>
          文件上传超限 捕获 RequestEntityTooLarge 异常 except RequestEntityTooLarge: ...
          第三方API超时 设置超时 + 重试机制 requests.get(url, timeout=5)

          场景 工具/方法
          代码块级错误处理 try-except + 具体异常类型捕获
          全局异常统一响应 框架错误处理器(如 @errorhandler
          自定义错误类型 继承 Exception 定义业务异常类
          日志记录 logging 模块记录堆栈信息
          异步错误处理 asyncio 任务 + 异常回调

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

          您可能感兴趣的文章:

          • Python 错误和异常小结
          • Python 错误和异常代码详解
          • Python错误和异常总结详细
          •  Python错误与异常处理
          • Python基础教程之错误和异常的处理方法
          • Python常遇到的错误和异常
          • Python基础之语法错误和异常详解

          站内搜索