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

 更新时间:2025年07月11日 09:59:23   作者:伤不起bb  
在任何编程语言中,异常(Exception)都是一种不可避免的现象,它们通常是由程序运行时的错误或意外情况引起的,这篇文章主要介绍了Python中web错误处理与异常捕获的相关资料,需要的朋友可以参考下

一、概述

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

  • 核心目标

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

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

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

  • 常见场景

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

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

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

  • HTTP 错误码关联

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

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

核心原则

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

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

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

二、try 语句

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

1.基础语法

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 清战场。

2. 示例:捕获常见异常

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可视化Matplotlib折线图plot用法详解

    Python可视化Matplotlib折线图plot用法详解

    这篇文章主要为大家介绍了Python可视化中Matplotlib折线图plot用法的详解,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步
    2021-09-09
  • Python常见内置高阶函数即高阶函数用法

    Python常见内置高阶函数即高阶函数用法

    这篇文章主要介绍了Python的三种高阶函数map、filter、reduce,高阶函数就是一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数,具体内容,需要的朋友可以参考下面文章的介绍
    2021-12-12
  • Python入门教程(三十九)Python的NumPy安装与入门

    Python入门教程(三十九)Python的NumPy安装与入门

    这篇文章主要介绍了Python入门教程(三十九)Python的NumPy安装与入门,NumPy 是一个Python包,它是一个由多维数组对象和用于处理数组的例程集合组成的库,,需要的朋友可以参考下
    2023-05-05
  • python实现微信自动回复及批量添加好友功能

    python实现微信自动回复及批量添加好友功能

    这篇文章主要介绍了python实现微信自动回复及python 批量生成微信添加好友截图功能的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 在python带权重的列表中随机取值的方法

    在python带权重的列表中随机取值的方法

    今天小编就为大家分享一篇在python带权重的列表中随机取值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 简单了解python代码优化小技巧

    简单了解python代码优化小技巧

    这篇文章主要介绍了简单了解python代码优化小技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2019-07-07
  • Python处理RSS、ATOM模块FEEDPARSER介绍

    Python处理RSS、ATOM模块FEEDPARSER介绍

    这篇文章主要介绍了Python处理RSS、ATOM模块FEEDPARSER介绍,本文只是做个入门级的简洁介绍,需要的朋友可以参考下
    2015-02-02
  • python hash每次调用结果不同的原因

    python hash每次调用结果不同的原因

    这篇文章主要介绍了python hash每次调用结果不同的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python 机器学习之线性回归详解分析

    Python 机器学习之线性回归详解分析

    回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值也随之发生变化。回归模型正是表示从输入变量到输出变量之间映射的函数
    2021-11-11
  • 一文了解conda虚拟环境的使用及常见问题

    一文了解conda虚拟环境的使用及常见问题

    管理不同项目的依赖关系是一个常见而棘手的问题,本文主要介绍了一文了解conda虚拟环境的使用及常见问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论