当前位置: 首页 > 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 的模块加载器找不到这个模块。去安装库即可,如果是自定义的模块,配置好对应的路径

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

@浙大疏锦行

相关文章:

  • 数字高程模型(DEM)公开数据集介绍与下载指南
  • vscode extention踩坑记
  • 七部门:设立“国家创业投资引导基金”,优先支持取得关键核心技术突破的科技型企业上市融资
  • 学会使用ai作图
  • c++在头文件中声明全局的变量
  • TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》
  • Deep Learning(手写字识别 - CNN)
  • 阿里的库存秒杀实现与Inventory Hint技术解析
  • Python 接入DeepSeek
  • 高等数学第七章---微分方程(§7.1-§7.3微分方程概念、一阶微分方程、一阶微分线性方程)
  • 生成式人工智能认证(GAI认证)官网 - 全国统一认证中文服务平台上线
  • 一种资源有限单片机处理cJSON数据的方法
  • WordPress 文章和页面:它们的区别是什么?
  • Qt 的.pro文件配置详解
  • 让 Cursor 教我写 MCP Client
  • Qt for Android编译报错解决 -------- Connection reset
  • 编程技能:字符串函数04,直接使用 strcpy,解决报错
  • C#上位机RS485通信控制变频器
  • CodeBuddy Craft,我的编程搭子
  • 股指期货套期保值怎么操作?
  • 商务部回应美方加严限制中国芯片:敦促美方立即纠正错误做法
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴
  • 哪种“网红减肥法”比较靠谱?医学专家和运动专家共同解答
  • 福建厦门市副市长、市公安局局长陈育煌出任吉林省公安厅厅长
  • 长沙通报一出租房疑存非法代孕:查封涉事场所,相关人员被控制
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目