当前位置: 首页 > news >正文

python中的异常处理try-except - else - finally与自定义异常处理

为什么要处理异常?

如果异常没有被合理的处理,就会导致程序不正常运行,与我们期待的结果不相符,例如下面这个例子(除数不能为0的案例)

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):return x / yprint(division(2,3))
print(division(2,0))
print(division(2,1))

执行结果
在这里插入图片描述

异常处理正确流程try-except - else - finally

python的关键字finally功能是和try配合使用,在try之后可以有except或者else,finally关键词必须放在except和else之后,不论是否有异常发生一定会执行finally当中的逻辑。
例如:一定除数不能为0的try-except-else的处理逻辑

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")else:return vprint(division(2,3))
print(division(2,0))
print(division(2,1))

执行结果如下
在这里插入图片描述
当然,实际代码中有N中可能出现的错误异常,因此在excepte中还可能回处理其他异常,例如数据类型错误,例如

print(division('s',1))

执行结果为typeError
在这里插入图片描述
所以可能也需要处理不止一个异常

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")except TypeError as e:print(e)return ("数据类型异常,需要整型")else:return vprint(division(2,0))
print(division('s',1))
print(division(2,1))

在这里插入图片描述
除了这种可以预料的处理,我们还需要兜底处理逻辑,来保证其他异常被处理掉,所以需要用baseException来多兜底

    except BaseException as e:print(e)return ("发生了异常")

除此之外,如果有数据库相关资源需要关闭,文件资源需要处理都可以在finally中进行处理,因为finally中逻辑无论是否发生异常都可以保证被执行

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")except TypeError as e:print(e)return ("数据类型异常,需要整型")# 兜底处理except BaseException as e:print(e)return ("发生了异常")else:return vfinally:# 数据库、线程池、文件等各种资源的释放,无论是否发生了异常,finally语句块都会在return之前被执行print( "finally语句块在返回之前被执行")print(division(2,0))
print(division('s',1))
print(division(2,1))

执行结果如下
在这里插入图片描述

自定义异常的抛出

举个例子:检测考试是否通过的异常,60分以上为通过

# 自定义异常
class scoreException(BaseException):# 构造方法def __init__(self, msg):super().__init__(msg)# 自定义函数
def checkScore(score):if score < 60:raise scoreException("Score is too low!")else:print("Score is ok!")# test方法
try:score = int(input("Enter a score number: "))checkScore(score)
except scoreException as e:print(e)print("continue other logic")

执行结果1
在这里插入图片描述
执行结果2
在这里插入图片描述

相关文章:

  • 探索数据的力量:Elasticsearch中指定链表字段的统计查询记录
  • 生日悖论理论及在哈希函数碰撞中的应用
  • AndroidMJ-mvp与mvvm
  • ASR语音转写技术全景解析:从原理到实战
  • 人工智能学习21-Pandas-pivot_table
  • 关于MCU、MPU、SoC、DSP四大类型芯片
  • 基于区块链的去中心化身份验证系统:原理、实现与应用
  • 【软测】接口测试 - 用postman测试软件登录模块
  • GDI+ 中与GDI32取图形区域函数对比CreateEllipticRgn/CreatePolygonRgn
  • day31 打卡
  • 茶文化部分答案
  • 数据库学习(六)——MySQL事务
  • Linux文件权限管理核心要点总结
  • 【图片转 3D 模型】北大·字节跳动·CMU携手——单图15 秒生成结构化3D模型!
  • 精准测量 MySQL 主从复制延迟—pt-heartbeat工具工作原理
  • 8088单板机8259中断的软件触发测试
  • Python全栈开发:前后端分离项目架构详解
  • 如何让 VS Code 仅通过滚轮放大字体,而不缩放整个界面?
  • 人工智能学习15-Numpy-花式索引和索引技巧
  • 齐次变换矩阵相乘的复合变换:左乘与右乘的深度解析
  • 网站建设 广州/宁波seo费用
  • 如何做网站关键字优化/seo新手入门教程
  • android开发者官网/深圳网站设计专家乐云seo
  • 学网站制作/线上推广方式都有哪些
  • 营销网站建设推广/软文代发代理
  • 公安部/宁波seo营销平台