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

相关推荐
爱上python的猴子1 小时前
用python编写一个放烟花的小程序
开发语言·python·pygame
B站计算机毕业设计超人1 小时前
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
大数据·hadoop·python·深度学习·机器学习·数据分析·数据可视化
Edward-tan2 小时前
【玩转全栈】----Django连接MySQL
python·mysql·django
油头少年_w2 小时前
Python数据容器
python
有杨既安然2 小时前
Python爬虫入门指南:从零开始抓取数据
开发语言·爬虫·python·信息可视化·数据分析·excel
Grovvy_Deng2 小时前
使用rust加速python的tgz解压
开发语言·python·rust
Tiandaren3 小时前
医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件
c++·人工智能·python·深度学习·3d·开源
EnochChen_3 小时前
PyTorch快速入门教程【小土堆】之Sequential使用和小实战
人工智能·pytorch·python
半夏知半秋3 小时前
python中常用的内置函数介绍
服务器·开发语言·笔记·后端·python·学习
视觉人机器视觉3 小时前
halcon中图像滤波分为空间域和频域两种方法
图像处理·python·计算机视觉