当前位置: 首页 > news >正文

python基础学习笔记第八章——异常

一、异常概念

  • 异常(BUG):程序运行时出现的错误,会导致程序直接中断停止。

  • 例子:除0、用错数据类型、文件不存在、访问不存在的变量等。

二、异常捕获的意义

代码不可能100%无错,给(try)可能出错的代码做(except)备用方案,让程序出错后不崩溃,继续运行。

三、完整语法

try: # 【核心】可能抛出异常的代码 可能报错的代码 except 异常类型1 as 变量: # 捕获到指定异常,执行处理 异常1的处理方案 except 异常类型2 as 变量: # 捕获另一种异常 异常2的处理方案 except Exception as e: # 【万能捕获】捕获所有异常(最后写) 所有未捕获异常的处理 else: # 【可选】没有发生任何异常,才执行 程序正常运行的代码 finally: # 【可选】无论是否异常,一定会执行 # 常用于:关闭文件、关闭连接、清理资源 必须执行的代码

语法要点

  1. try:只有里面的代码会被监控异常

  2. except:匹配异常类型,进行特定处理

  3. Exception:所有异常的父类,能捕获全部异常

  4. else:无异常才执行

  5. finally:有无异常都执行(必执行)

四、基础代码示例

示例1:捕获除0错误 + 万能捕获

try: a = 10 b = 0 result = a / b # 会报 ZeroDivisionError 异常 print(result) # 捕获指定异常 except ZeroDivisionError as e: print("捕获到异常:不能除以0!") print("异常信息:", e) # 捕获其他所有异常 except Exception as e: print("发生未知错误:", e) else: print("程序运行完全正常") finally: print("=== 无论是否报错,我都会执行 ===")

示例2:捕获类型错误

try: num = "123" sum = num + 10 # 字符串+数字,报 TypeError except TypeError as e: print("错误:数据类型不匹配")

五、异常的传递性

  1. 异常会从内到外、从下到上传递(函数嵌套中)

  2. 出错的函数→ 调用它的函数 → 主函数

  3. 直到被except捕获,若全程没捕获,程序崩溃报错

代码演示传递

# 函数3:出错的地方 def func03(): print(10 / 0) # 异常诞生 # 函数2:调用函数3 def func02(): func03() # 函数1:调用函数2 def func01(): func02() # 主函数:最终捕获 try: func01() except Exception as e: print("主函数捕获到了传递上来的异常:", e)

结论:异常从func03func02func01main,最终被捕获。

六、报错查看技巧

  • 报错信息最后一行:具体异常类型 + 原因

  • 往上看:报错代码位置、函数调用链条

  • 直接定位最后一行,最快找到bug根源

总结

  1. 异常=运行时bug,会中断程序

  2. try监控代码,except捕获处理,Exception捕获全部

  3. else无异常执行,finally必执行

  4. 异常会向上传递,直到被捕获

http://www.jsqmd.com/news/517589/

相关文章:

  • 从高职技能大赛看实战:手把手教你用Selenium+JMeter+Postman完成一个完整测试项目
  • 如何给 Reasoning 提供过程奖励?逻辑能力或许是激发通用推理能力的关键!
  • 【PLC C语言转换效率优化白皮书】:20年工控专家实测验证的7大编译瓶颈与3倍速代码落地方案
  • STM32 .map文件深度解析与Flash空间精简实战
  • (-aa-) 必要性:snap 关闭自动更新,snap包离线下载与安装的方法 (****)
  • 基于springboot心理健康平台project56740
  • ngrok 内网穿透实战:从零到精通的部署、配置与场景化应用指南
  • SEER‘S EYE 本地化部署详解:基于Ubuntu系统的环境配置与依赖安装
  • 为什么你的智能家居还是‘反应迟钝’?Agentic AI+提示工程给你答案
  • 法学论文降AI率推荐:法条引用多、专业术语密集怎么处理 - 我要发一区
  • Python爬虫实战:5分钟搞定豆瓣电影TOP250数据抓取(附完整代码)
  • KnowFlow 深度集成 MinerU 2.0:从 pipeline 到 vlm-sglang 的架构演进与精度飞跃
  • 探秘书匠策AI:课程论文写作的“全能魔法师”
  • 避坑指南:华为ME909在树莓派Zero W上的短信发送全流程(解决ttyUSB识别问题)
  • 从零打造ESP32桌面伴侣:Arduino驱动舵机与OLED的交互实践
  • Pixel Dimension Fissioner环境部署:Ubuntu 22.04 LTS + NVIDIA Driver 535部署记录
  • 2026年剖析SCI英文降重降AI公司,看看哪家口碑好 - myqiye
  • java毕业设计基于springboot校园易物平台-project24877
  • 阿里最新开源声音克隆神器:CosyVoice3保姆级教程,3秒复刻任何声音
  • 告别基础问答:用Cursor的MCP Server打造你的AI编程副驾(Filesystem+BrowserTools实战解析)
  • Gemini 3.1 Pro 2026年国内使用指南:技术解析与镜像站实测
  • 2026年分析SCI降重降AI服务哪个公司靠谱,英辑Editeg优势凸显 - mypinpai
  • py4DSTEM实战指南:4D-STEM数据处理的完整解决方案
  • 突破限制!微信小程序实现多文件上传的3种实战方案(含FormData polyfill)
  • 永辉购物卡回收技巧,轻松变现! - 团团收购物卡回收
  • Mosquitto密码文件深度解析:从加密原理到多用户管理技巧
  • 为什么 MySQL 索引用的是 B+ 树而不是红黑树?
  • Obsidian笔记中的外部图片如何实现永久存储与本地化管理?
  • Graph U-Nets实战:用PyTorch Geometric实现gPool和gUnpool的5个关键步骤
  • RS485接口EMC设计:三级防护与分地系统实战指南