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"。

相关推荐
2401_868534781 分钟前
集中式存储和分布式存储
python·pygame
卷无止境6 分钟前
FastAPI 权限管理实战:从 ACL 到 RBAC 的那些门道
后端·python·fastapi
卷无止境6 分钟前
软件文档写作中,Agent最常用的十种skill拆解
python·agent·claude
2603_965148119 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
jufeng130710 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk10 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_9563198811 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!11 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计12 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
DeepVisionary13 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化