【python机器学习】Day 25 异常处理
- 异常处理机制
- debug过程中的各类报错
- try-except机制
- try-except-else-finally机制
在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。
借助ai写代码的时候,经常会遇到try-except的异常处理模块,这是因为大部分大模型在后训练阶段都是经过强化学习训练的,为了确保结果的正确运行,只有采取 try-except的异常处理模块才能提高模型运行成功的概率。
日常写代码的时,大概率不会采取这些写法。
Python的异常处理机制为程序提供了强大的容错能力。当程序在运行时遇到意外情况(即异常),程序不会直接崩溃,人们可以通过 try-except 优雅地处理这些错误,并可能继续执行后续逻辑(如果设计允许)或以可控的方式结束。
当异常发生时,Python会创建一个异常对象 (exception object)(通常是 Exception 类的子类实例)。如果这段可能出错的代码位于 try 语句块中,程序流程会寻找并跳转到匹配的 except 语句块(如果存在)来处理这个异常。
*except 除···之外 exception 除外*
1.try-except语句
try:#语句块1
except 异常值类型:#语句块2
2.except支持多个except语句
try:#语句块1
except异常值类型1:#语句块2
except 异常值类型2:#语句块3...
except 异常值类型n:#语句块n+1except:#语句块n+2
从第1 到 n 个except语句后,都指定了异常类型,说明这些except所包含的语句只处理这些类型的异常,最后一个except语句没有指定异常类型,表示这个except所包含的语句块可以除列举之外的,其他类型异常
3.try-except-else-finally
try:#语句块1
except异常值类型1:#语句块2
else:#语句块3finally:#语句块4
当try语句块1正常执行结束,且没有发生异常时,执行else中的语句块3
finally语句块,无论try语句块1中是否发生异常,语句块4都会执行
4.异常类型
###SyntaxError (语法错误):代码不符合 Python 的语法规则
### NameError (名称错误):使用一个未被定义的变量、函数或对象的名称。
### TypeError (类型错误): 对一个不支持该操作的数据类型,执行了某个操作或函数。
### ValueError (值错误): 函数接收到的参数类型正确,但其值不是函数所需参数类型或无效。
### IndexError (索引错误): 访问序列(如列表、元组、字符串)中一个不存在的索引。
### KeyError (键错误): 访问字典中一个不存在的键。
### AttributeError (属性错误): 访问一个对象没有的属性或方法。
### ZeroDivisionError (除零错误): 将一个数字除以零(0作为被除数)
### FileNotFoundError (文件未找到错误): 打开一个不存在的文件(通常是在读模式下),或者路径不正确。
### ModuleNotFoundError (导入错误):导入一个不存在的模块,或者模块存在但其中的特定名称找不到, Python 的模块加载器找不到这个模块。去安装库即可,如果是自定义的模块,配置好对应的路径
当代码出现这类错误时,程序会立即停止执行,并打印出一个 “traceback”(回溯信息),这个信息非常重要,它会告诉你:
1. 错误类型 (e.g., NameError, TypeError)
2. 错误发生的文件名和行号
3. 导致错误的那行代码
4. 错误的简要描述
5.说明
try-except异常只用来检测极少发生的情况,例如:检测用户输入的合规性,文件是否打开成功等。对于索引字符串超过范围应该在程序中采用 if 语句直接判断,而避免通过异常处理来应对这种可能发生的“错误”
面向商业应用的软件产品,稳定性和可靠性是最重要的衡量指标之一,这类软件也不会滥用try-except语句。因为try-except语句会影响代码的可读性,增加代码维护难度,因此只在关键地方采用try-except语句处理可能发生的异常。
更多的使用场景需要自己探索积累