python的异常处理--异常引入,异常处理,常见异常,断言,自定义异常

python的异常处理

一.异常引入

异常概念: 程序在运行过程中发生不可预知的错误,程序员很难堵住所有的漏洞,就需要异常处理

二.异常处理

异常处理:

捕获异常: try-except-else-finally

将可能发生异常的代码,放入try-except中

else:当代码没有异常就会执行else,如果代码块中有return,else将不执行

finally:无论有没有异常或有没有return,finally一定是最终执行的代码

抛出异常: raise

当代码符合语法要求但不符合现实业务,就可以抛出异常

python 复制代码
    try:
        a = float(input('请输入第一个数:'))
        b = float(input('请输入第二个数:'))
        print(a / b)
    except ValueError as e:
        print('请输入纯数字')
    except ZeroDivisionError as e:
        print('除数不能为0')
    except Exception as e:
        print(e)
    else:
        print('没有异常,就会进入else')  
    finally:
        print('最终要执行的代码')

在以上代码中,try内是我们要测试的代码,当输入的不是纯数字时,会引发ValueError错误,当除数为0时,会引发ZeroDivisionError错误,我们也可以用Exception捕获其他类型的异常,如果没有异常会执行else内部的代码,最终会执行finally内部的代码。

三.常见异常

Exception :所有异常的基类。
AttributeError :尝试访问对象属性失败时引发。例如,访问不存在的对象属性。
IOError(在Python 3中为OSError) :输入/输出操作失败时引发。例如,文件读写错误。
ImportError :无法导入模块或包时引发。例如,尝试导入不存在的模块。
IndexError :索引超出序列范围时引发。例如,访问列表的非法索引。
KeyError :尝试访问字典中不存在的键时引发。
KeyboardInterrupt :用户中断执行(通常是Ctrl+C)时引发。
MemoryError :内存不足,无法分配新对象时引发。
NameError :尝试访问未声明的变量时引发。
NotImplementedError :抽象基类中的方法未在派生类中实现时引发。
OSError :操作系统错误。这是IOError的基类,用于更广泛的操作系统相关问题。
OverflowError :数值运算结果过大,无法表示时引发。
RecursionError :递归调用层次过深时引发。
ReferenceError :弱引用试图访问已经垃圾回收的对象时引发。
RuntimeError :在解释器执行期间检测到的一般错误。
SyntaxError :代码语法错误时引发。注意,这通常是在代码编译时捕获的,而不是在运行时。
SystemExit :请求解释器退出时引发。通常由sys.exit()函数引发。
SystemError :解释器遇到内部错误时引发。
TypeError :操作或函数应用于不适当类型的对象时引发。例如,尝试对非数字执行数学运算。
UnboundLocalError :尝试访问未绑定的局部变量时引发。
UnicodeError :涉及Unicode相关的操作时发生错误时引发。它是几个与Unicode相关的异常的基类。
ValueError :操作或函数接收到具有正确类型但不适合该操作的参数时引发。例如,将字符串转换为整数时提供的字符串不是有效的整数表示。
ZeroDivisionError:除法或取模运算的第二个参数为零时引发。

四.断言

断言是一种用于调试目的的机制,它允许我们在代码中设置检查点,以确保在程序运行到某个点时,程序的某个状态(如变量的值)满足特定的条件。

python 复制代码
a = int(input('请输入数字:'))
assert a > 20, 'a不大于20'
print(a)

在以上代码中,当输入的数字小于或者等于20时,将会抛出带有自定义错误信息的'AssertionError: a不大于20',当输入的数字大于20时,将会打印a的值。

五.自定义异常

python中我们可以通过继承内置的Exception类或其子类来创建自定义异常。自定义异常允许我们定义具有特定含义和行为的错误类型。

python 复制代码
class AgeError(Exception):
    def __init__(self, message):
        self.message = message


try:
    age = int(input('请输入年龄:'))
    if age < 0 or age > 150:
        raise AgeError('年龄在0-150')

except AgeError as e:
    print(e)

在以上代码中我们定义了一个年龄相关的异常,在自定义异常类中,重写了__init__ 方法用于接收一个错误消息作为参数。这个错误消息可以在捕获异常时被打印出来。在下方的测试中,当输入的年龄小于 0 或大于 150时,程序会抛出 AgeError 异常,并打印出错误消息 "年龄在0-150"。

相关推荐
SelectDB27 分钟前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码8 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵19 小时前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li21 小时前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸1 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学1 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi2 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi2 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab