0

0

Python 面向失败的系统设计思想

冷漠man

冷漠man

发布时间:2026-02-17 14:08:58

|

568人浏览过

|

来源于php中文网

原创

面向失败的设计需预判故障点并确保系统可恢复,而非仅用try/except掩盖错误;每个except必须记录日志、告警或降级,区分i/o异常类型,http失败时优先缓存或切备用接口,非法输入应抛具体异常而非返回none,测试须覆盖失败路径。

python 面向失败的系统设计思想

为什么 try/except 不该只包住 print()

面向失败的设计,不是“加个异常捕获就完事”,而是预判哪里会崩、崩了之后系统还能不能继续干活。很多人写 try/except 只为了不让程序退出,结果把错误吞掉、不记录、不重试、不降级,等于给故障埋雷。

实操建议:

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

  • 每个 except 块必须做明确的事:记录日志(用 logging.error(),别用 print())、触发告警、返回兜底值或调用降级逻辑
  • 避免裸 except: —— 至少写成 except Exception:,否则连 KeyboardInterrupt 都被拦住,本地调试都 Ctrl+C 不了
  • 对 I/O 类操作(如 requests.get()open()),要区分网络超时、连接拒绝、解析失败等不同异常,各自处理,而不是全塞进一个 except

requests 调用失败后,怎么才算“系统还在活”

HTTP 请求失败是常态,但“失败”不等于“不可用”。关键看下游挂了,上游是否还能响应、是否能缓存旧数据、是否能切到备用接口。

实操建议:

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

  • 设置合理超时:requests.get(url, timeout=(3, 7))——第一个数是连接超时,第二个是读取超时;不设 timeout,默认可能卡死几十秒
  • session 复用连接,配合 urllib3.Retry 控制重试逻辑,但注意:幂等性没保障的请求(如 POST)不能盲目重试
  • 失败时优先返回缓存(哪怕过期几秒),比直接抛 502 更友好;缓存策略建议用 functools.lru_cachediskcache,别手写全局 dict

函数返回 None 还是抛 ValueError?这是设计分水岭

返回 None 看似简单,但调用方很容易忽略检查,导致后续出现 AttributeError: 'NoneType' object has no attribute 'xxx',错误位置和根源脱节。

mallcloud商城
mallcloud商城

mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

下载

实操建议:

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

  • 输入非法时,立刻抛出具体异常(如 ValueErrorTypeError),而不是返回 None 让调用方猜
  • 查询类函数(如 get_user_by_id())找不到数据时,按场景选:内部服务间调用建议抛 NotFound 自定义异常;对外 API 则返回 None 或空对象,避免暴露内部错误结构
  • 如果真要返回 None,函数名里就得体现不确定性,比如叫 find_user() 而不是 get_user(),这是契约信号

测试“失败路径”比测“成功流程”更花时间,但不能跳

单元测试只跑 assert func(1, 2) == 3 是自欺欺人。真正压垮系统的,永远是 func(None, [])、磁盘满、数据库连不上、第三方返回乱码这些 case。

实操建议:

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

  • pytest.raises() 显式断言异常类型,例如 with pytest.raises(ValueError): func(-1)
  • 模拟失败依赖:用 unittest.mock.patch 拦截 open()requests.post(),让它抛 ConnectionError,再验证你的降级逻辑是否触发
  • 在 CI 中加入故障注入:比如用 tox + pytest-timeout 强制超时,或临时删掉配置文件,确认程序不会 panic

真正的面向失败,不是堆防御代码,而是让每次失败都变成一次可观察、可恢复、可推演的行为。最常被忽略的,是没给失败留“出口”——比如重试三次后既不告警也不通知,只是默默返回默认值,那问题就从“偶发”变成了“静默腐烂”。

热门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的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

12

2026.02.03

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

326

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

772

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

339

2023.10.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1486

2023.10.19

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

462

2026.02.13

热门下载

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

精品课程

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

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

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

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