首页/新闻资讯/正文详情

程序崩了不要慌!Python 异常处理从 try-except 到自定义异常,老哥给你兜底

发布时间:2026/11/4 2:30:14 来源:云帆数科 栏目:资讯中心
程序崩了不要慌!Python 异常处理从 try-except 到自定义异常,老哥给你兜底
Python 是解释型语言运行到哪才检查到哪。所以程序报错不丢人怎么兜住错误让程序继续跑才是本事。Python 有两类错误语法错误和异常。语法错误程序解析时遇到的如while True print(1)少了冒号 →SyntaxError异常语法正确但运行时报错如变量没定义 →NameError。大多数异常程序没处理就会以错误信息形式打印并中断。一、try-except捕获并处理异常处理异常不是 避开错误而是出错时提供解决方案、不终止程序。try: result 3 / 1 print(没有发生异常) except: print(发生异常了) print(End)规则没异常就跳过 except 继续走有异常就跳过 try 剩余代码进 except。二、捕获指定类型 获取异常信息异常信息格式冒号前是类型冒号后是描述。可以按类型分别处理用as e拿到异常对象try: result 3 / 0 print(发生异常了) except ZeroDivisionError as e: # 指定类型 print(e) # division by zero except (RuntimeError, TypeError, NameError) as e: # 一个 except 管多种 print(e) except: # 通配符兜底 print(Unexpected error) print(End)要点一个 except 可以把多个异常放元组里最后一个不带类型的 except 是通配符匹配不到的异常会向外传递。三、else没异常才执行else放在所有 except 之后try 里没抛异常才执行。把 正常结果 和 异常处理 分开代码更清晰try: result x / y except ZeroDivisionError: print(除数不能为零) else: print(f结果是: {result}) # 只有没异常才打印结果四、finally无论如何都会执行finally放在最后无论是否异常都执行专门做清理关文件、释放连接、解锁try: result 3 / 0 except NameError as e: print(e) else: print(result) finally: print(finally) # 一定会执行 print(End)注意finally是 try 结构的一部分异常没被捕获、程序终止时它也会执行而放在 try 结构外面的代码若异常没被兜住就不会执行。五、主动抛出异常 raise想主动制造错误、拦截非法输入用raise 异常类型(描述)def int_add(x, y): if isinstance(x, int) and isinstance(y, int): return x y else: raise TypeError(参数类型错误) print(int_add(1, 2)) # 3 print(int_add(1, 2)) # TypeError: 参数类型错误六、assert 断言assert 表达式 [, 描述]表达式为 False 时抛AssertionError常用于调试。等价于if not 表达式: raise AssertionErrordef int_add(x, y): assert isinstance(x, int) and isinstance(y, int), 参数类型错误 return x y print(int_add(1, 2)) # 3 print(int_add(1, 2)) # AssertionError: 参数类型错误七、自定义异常通过继承Exception创建自己的异常class MyError(Exception): def __init__(self, value): self.value value def __str__(self): return repr(self.value) try: raise MyError(1) # 主动抛出自定义异常 except MyError as e: print(触发自定义异常:, e.value) # 触发自定义异常: 1八、异常的传递异常层层向外传直到被某个层捕获或程序终止try: try: try: print(1 / 0) # 这里抛 ZeroDivisionError except NameError as e: print(第三层, e) except TypeError as e: print(第二层, e) except Exception as e: # 最终在这里被兜住 print(第一层, type(e), e) # 第一层 class ZeroDivisionError division by zero九、with自动管理资源with封装了 try-except-finally 范式自动释放资源最典型是文件# 常规方式出错时文件没关 try: file open(test.txt, w) file.write(a) file.close() finally: print(文件是否关闭, file.closed) # False 没关掉 # 用 with出错也自动关 try: with open(test.txt, w) as f: f.write(a) finally: print(文件是否关闭, f.closed) # True 自动关了with的原理调用对象的__enter__进块、__exit__无论是否异常都会执行清理。它要求对象是上下文管理器实现了__enter__和__exit__。十、常见异常速查表格异常说明Exception所有非系统退出异常的基类自定义异常都继承它ArithmeticError算术错误基类含ZeroDivisionError等LookupError键 / 索引无效基类含IndexError、KeyErrorAttributeError属性引用或赋值失败IndexError序列索引越界KeyError字典找不到键NameError变量名未找到TypeError操作 / 函数应用于类型不当的对象OSError系统相关错误文件未找到、磁盘满等SyntaxError语法错误KeyboardInterrupt用户按 Ctrl-C 中断老哥收尾异常处理的核心套路try 包住有风险的代码、except 按类型分流as e 拿信息、else 管没异常的情况、finally 做必做的清理、raise 主动抛、assert 调试断言、with 自动释放资源。掌握这套你的程序就能 稳如老狗再也不会一崩到底。下一篇讲模块与包—— 怎么把代码拆分、复用、给别人用。有问题随时回来找老哥。

相关推荐

SVN记录
SVN记录

SVN工程的IP存在修改,然后SVN up失败,如何快速修改本地文件指向的SVN工程? 当 SVN 服务器的 IP 地址发生变更后,本地工作副本仍指向旧地址,会导致 svn update 失败。要快速将本地项目重新指向新的 SVN 工程,最推荐且无损的方式是使用** Relocate(重新定位) **功能。 以… · 2026/11/4 2:29:14

〖AI物流落地 04〗跨境集装箱数字孪生:3D装载图、遮挡补全与海关查验的工程实现
〖AI物流落地 04〗跨境集装箱数字孪生:3D装载图、遮挡补全与海关查验的工程实现

一、传统装箱是“黑箱”,查验是“大海捞针”跨境集装箱装载有一个长期存在的物理盲区:货物装入集装箱后,箱内空间对所有人都是不可见的。工人凭经验堆叠,装箱图示与实际工况脱节;海关查验时,如果需要对某个… · 2026/11/4 2:29:14

几千亿参数为什么只用一小部分?MoE 的路由与专家
几千亿参数为什么只用一小部分?MoE 的路由与专家

文章目录1 -> 引言2 -> 专家是参数模块,不是坐在模型里的几位顾问3 -> 三笔不同的账:参数容量、单次计算与实际部署4 -> 路由不是简单挑最大值,训练还要避免专家闲忙不均5 -> 评估 MoE,最好把系统条件写在成绩旁边… · 2026/11/4 2:29:14

解决Cursor编辑器Prettier格式化失效的排查指南
解决Cursor编辑器Prettier格式化失效的排查指南

1. 问题现象与初步排查最近在项目开发中遇到一个棘手问题:Cursor编辑器内置的Prettier代码格式化功能突然失效,状态栏持续显示"Prettier未激活"提示。作为深度依赖自动化格式化的开发者,这种工具链断裂直接影响了编码效率。经过系统… · 2026/11/4 3:21:23

多模态数据处理架构设计与性能优化实战
多模态数据处理架构设计与性能优化实战

1. 多模态数据处理的行业背景与核心价值在当今数据爆炸的时代,企业每天产生的数据早已不再局限于传统的结构化表格。来自IoT设备的传感器读数、生产线上的机器视觉图片、客服中心的语音录音、社交媒体上的视频内容,这些异构数据构成了典型的多模态数据环… · 2026/11/4 3:21:23

东华大学OJ刷题攻略:高效打卡与复盘方法
东华大学OJ刷题攻略:高效打卡与复盘方法

1. 项目背景与核心价值作为一名计算机专业考研党,在准备东华大学复试机试的过程中,我发现了OJ(Online Judge)刷题的重要性。东华的机试环节占总成绩的30%,而OJ题库中的题目往往就是考试原题。但很多同学在刷题时容易陷… · 2026/11/4 3:21:23

前端默认值处理函数:原理、实现与Vue最佳实践
前端默认值处理函数:原理、实现与Vue最佳实践

1. 为什么需要默认值处理函数?在前端开发中,我们经常遇到需要处理预期为对象但实际可能为null或undefined的情况。特别是在Vue的模板渲染和条件判断中,这种场景尤为常见。一个健壮的默认值处理机制可以显著提升代码的可读性和稳定性。我曾在多… · 2026/11/4 3:21:23

OpenCV 4.8.0 VS2019 X64动态/静态编译全解析
OpenCV 4.8.0 VS2019 X64动态/静态编译全解析

简介:本资源为OpenCV 4.8.0在Windows平台X64架构下的完整编译成果包,专为C开发者、计算机视觉初学者及项目集成工程师设计,解决VS环境中OpenCV库配置复杂、动态/静态链接易出错等高频痛点。压缩包共664个文件,含502个hpp与56个h头… · 2026/11/4 3:21:23

Excel查重与去重:条件格式、COUNTIF、数据透视表、删除重复项怎么选
Excel查重与去重:条件格式、COUNTIF、数据透视表、删除重复项怎么选

拿着一张两万行的客户明细表,被同事问“这里面有没有重复的”,这件事我经历过太多次。更麻烦的不是查不出来,而是很多人上来就点“数据”选项卡里的“删除重复项”,点完弹个框说“删除了 13482 个重复值”,然后发现表里… · 2026/11/4 3:20:23

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码