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

python打卡day25

python的异常处理机制

知识点回顾:

  1. 异常处理机制
  2. debug过程中的各类报错
  3. try-except机制
  4. try-except-else-finally机制

在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。

作业:理解今日的内容即可,可以检查自己过去借助ai写的代码是否带有try-except机制,以后可以尝试采用这类写法增加代码健壮性。

异常处理的核心概念是:

  •  try: 包含可能会引发异常的代码块。程序会首先尝试执行这里的代码
  • except: 如果try块中的代码确实引发了特定类型的异常(或者任何异常,如果未指定类型),则执行此代码块
  • else: (可选)如果try块中的代码没有发生任何异常,则执行此代码块
  • finally: (可选)无论try块中是否发生异常,总会执行此代码块(常用于资源清理)

常见语句结构;

1、try-except

try:# 可能会引发异常的代码
except ExceptionType: # 最好指定具体的异常类型,例如 ZeroDivisionError, FileNotFoundError# 当 try 块中发生 ExceptionType 类型的异常时执行的代码

程序首先尝试执行 try 块中的代码,如果 try 块中的代码没有发生异常,则 except 块会被跳过,程序继续执行 try-except 结构之后的代码。如果 try 块中的代码发生了异常,Python会查找与该异常类型匹配的 except 块。如果找到匹配的,则执行该 except 块中的代码,然后继续执行整个 try-except 结构之后的代码(除非 except 块中又引发了新异常或执行了 return/break/continue 等)。如果未找到匹配的 except 块,异常会向上传播

类比: 你可以把它看作是:“尝试做这件事,如果出错了(并且是特定类型的错误),就执行补救措施。”

2、try-except-else

try:# 可能会引发异常的代码
except ExceptionType:# 当 try 块中发生 ExceptionType 类型的异常时执行的代码
else:# 当 try 块中【没有】发生任何异常时执行的代码

执行 try 块中的代码,如果 try 块中发生异常,则会查找并执行匹配的 except 块,else 块不会被执行。如果 try 块中没有发生任何异常,则会跳过所有 except 块,然后执行 else 块中的代码

print("--- try-except-else 示例 ---")def safe_divide(a, b):print(f"\n尝试计算 {a} / {b}")try:result = a / bexcept ZeroDivisionError:print("错误:除数不能为零!")return None # 或者其他表示失败的值except TypeError:print("错误:输入必须是数字!")return Noneelse:# 只有当 try 块中的 a / b 成功执行时,这里才会执行print("除法运算成功!")print(f"结果是: {result}")# 可以在这里进行基于成功结果的进一步操作print(f"结果的两倍是: {result * 2}")return result# 测试用例
safe_divide(10, 2)  # 成功
safe_divide(10, 0)  # ZeroDivisionError
safe_divide("10", 2) # TypeError (如果我们不先做类型转换的话)
safe_divide(20, "abc") # TypeErro

3.try-except-else-finally

finally 子句中的代码无论 try 块中是否发生异常,也无论 except 块是否被执行,甚至无论 try 或 except 块中是否有 return 语句,它总会被执行。这个特性,在机器学习和深度学习的中,多涉及资源的保存、文件的关闭等

一般的异常报错如下:

SyntaxError (语法错误)        原因: 代码不符合 Python 的语法规则(比如少个逗号冒号,表达式非法啥的),解释器在尝试解析代码时就会失败。这种错误在程序运行之前就会被检测到

NameError (名称错误)        原因: 尝试使用一个未被定义的变量、函数或对象的名称(手滑打错了变量名也是)

TypeError (类型错误)        原因: 对一个不支持该操作的数据类型执行了某个操作或函数

ValueError (值错误)        原因: 函数接收到的参数类型正确,但其值不合适或无效

IndexError (索引错误)        原因: 尝试访问序列(如列表、元组、字符串)中一个不存在的索引

KeyError (键错误)        原因: 尝试访问字典中一个不存在的键

AttributeError (属性错误)        原因: 尝试访问一个对象没有的属性或方法(比如说本该是方法的函数,被当成属性用了)

ZeroDivisionError (除零错误)        原因: 尝试将一个数字除以零

FileNotFoundError (文件未找到错误)        原因: 尝试打开一个不存在的文件(通常是在读模式下),或者路径不正确

ModuleNotFoundError (导入错误)        原因:尝试导入一个不存在的模块,或者模块存在但其中的特定名称找不到, Python 的模块加载器找不到这个模块。去安装库即可,如果是自定义的模块,配置好对应的路径

眼熟一下吧,免得报错了只会丢给大模型解答

@浙大疏锦行

http://www.xdnf.cn/news/439993.html

相关文章:

  • uniapp -- 验证码倒计时按钮组件
  • 数据安全与权限管控,如何实现双重保障?
  • 计算机网络:手机和基站之间是通过什么传递信息的?怎么保证的防衰减,抗干扰和私密安全的?
  • JT/T 808 通讯协议及数据格式解析
  • 【taro3 + vue3 + webpack4】在微信小程序中的请求封装及使用
  • 服务器被打了怎么应对
  • 微信小程序学习之搜索框
  • 查看当前 Python 环境及路径
  • hadoop中了解yarm
  • OpenCV进阶操作:人脸检测、微笑检测
  • OpenCV CUDA模块中逐元素操作------算术运算
  • 滑动窗口算法笔记
  • 【CSS】使用 CSS 绘制三角形
  • 阿里巴巴java开发手册
  • 【C/C++】深度探索c++对象模型_笔记
  • 一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp
  • 【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
  • Data Mining|缺省值补全实验
  • Three.js知识框架
  • Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网海量设备数据长期存储中的应用优化(248)
  • Linux架构篇、第五章_02git2.49.0分支管理与Gitee的部署
  • 车用CAN接口芯片:汽车神经系统的沉默构建者
  • 国产大模型 “五强争霸”,决战 AGI
  • 枢轴支压点策略
  • Flutter到HarmonyOS Next 的跨越:memory_info库的鸿蒙适配之旅
  • 可视化数据图表怎么做?如何实现三维数据可视化?
  • R语言机器学习算法实战系列(二十五)随机森林算法多标签分组分类器及模型可解释性
  • 小结:Android系统架构
  • 2025-5-14渗透测试:利用Printer Bug ,NTLMv2 Hash Relay(中继攻击),CVE-2019-1040漏洞复现
  • SparkSQL-数据提取和保存