0

0

Python异常捕获粒度设计_错误控制解析【教程】

舞夢輝影

舞夢輝影

发布时间:2026-01-04 22:22:02

|

763人浏览过

|

来源于php中文网

原创

异常捕获应按业务边界划定范围,以完整业务步骤为最小可恢复单元;底层抛具体异常,上层依类型响应;慎用裸except,优先明确异常类型;异常后须做状态清理或补偿。

python异常捕获粒度设计_错误控制解析【教程】

异常捕获的粒度,不是越细越好,也不是越粗越省事,关键看哪里真正需要干预、哪里该让错误自然暴露。

按业务边界划定 try 块范围

把一个函数或一个完整业务步骤(比如“下单→扣库存→发消息”)作为最小可恢复单元,而不是为每一行可能出错的代码都套 try。否则会掩盖真实问题,也增加维护成本。

  • ✅ 推荐:对整个支付流程统一捕获 PaymentError,记录日志并回滚事务
  • ❌ 避免:在调用第三方 SDK 的每一行都单独 try,再分别 print(e),结果错误被吞掉,后续逻辑却继续执行

分层捕获:底层抛具体异常,上层做策略响应

底层模块(如数据库访问)应主动 raise 自定义异常(如 UserNotFoundError、InsufficientBalanceError),而不是返回 None 或 -1;上层根据异常类型决定是重试、提示用户、还是降级处理。

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  • 数据库层抛出 UserNotFoundError,表示查无此人
  • API 层捕获它,返回 HTTP 404 和友好提示:“用户不存在,请检查账号”
  • 而同样一个 ConnectionError,则由框架层统一重试或切换备用服务

慎用裸 except: 和 except Exception:

它们会拦截 KeyboardInterrupt、SystemExit 等系统级信号,导致程序无法被 Ctrl+C 中断,或无法正常退出。真正需要兜底时,优先用 except (ValueError, TypeError, OSError):,或明确补上 except BaseException:(仅限极少数日志/清理场景)。

立即学习Python免费学习笔记(深入)”;

  • except: —— 隐式等价于 except BaseException:,风险极高
  • ⚠️ except Exception: —— 拦住大部分错误,但仍放行系统退出类异常
  • except (ConnectionError, TimeoutError): —— 明确、安全、意图清晰

异常后务必做“有状态”的清理或补偿

捕获异常不等于问题结束。要判断当前操作是否已产生副作用:文件是否已写入部分数据?数据库是否已插入中间记录?消息是否已发出但未确认?

  • 用 with 语句自动管理资源(文件、连接、锁)
  • 涉及多步更新时,优先设计成幂等操作,或引入补偿事务(如发送失败则写入延迟队列)
  • 不要只写 logging.exception() 就完事,要回答:“现在系统处于什么状态?下一步该谁来处理?”

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

17

2026.02.03

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

382

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2106

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

419

2023.10.16

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

33

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号