python 异常的传递性及主动抛出学习
作者:Dante丶 发布时间:2021-03-19 05:02:38
异常的传递性
在 Python 中,异常的传递性指的是,当一个异常没有被处理时,它会沿着调用栈向上抛出,直到被处理或者导致程序崩溃。
具体来说,当一个函数内部发生了异常但是没有进行处理时,该异常会向上抛出给调用该函数的代码块。如果这个代码块也没有处理该异常,那么异常会继续向上抛出,直到找到能够处理该异常的代码块或程序中止运行。
下面是一个简单的例子来演示异常的传递性:
def func1():
print("func1 开始")
func2()
print("func1 结束")
def func2():
print("func2 开始")
func3()
print("func2 结束")
def func3():
print("func3 开始")
a = 1 / 0 # 引发 ZeroDivisionError 异常
print("func3 结束")
try:
func1()
except Exception as e:
print("错误信息:", e)
在上述代码中,函数 func3()
发生了除零错误( ZeroDivisionError
),但是没有处理该异常。因此,该异常会向上抛出给调用 func3()
的代码块 func2()
,而 func2()
也没有处理该异常,所以异常会继续向上抛出给调用 func2()
的代码块 func1()
。最终,在 func1()
中的 try...except...
语句块捕获到了异常,并输出了错误信息。
总之,在编写完整的程序时,我们应该注意处理可能出现的异常,从而避免异常的传递和程序的崩溃。
主动抛出异常
在 Python 中,我们可以使用内置的 Exception
类来抛出异常。Exception
是所有标准异常的基类,当我们自定义异常时也可以继承该类。通过继承 Exception
类,我们可以很方便地创建自己的异常类型,并定义相应的处理方式。
下面是一个使用 Exception
抛出自定义异常的代码示例:
def func(value):
if value < 0:
# 如果参数小于0,则抛出自定义异常
raise Exception("参数不能小于0")
else:
print(f"参数值为:{value}")
try:
# 调用带参数的函数
func(-1)
except Exception as e:
# 捕获自定义异常并输出错误信息
print(e)
在上述代码中,当传入的参数小于 0 时,我们使用 raise
语句抛出 Exception
异常,并将错误信息一同抛出。最后,在主程序中,我们调用带参数的 func()
函数,并在捕获到自定义异常时输出错误信息。
需要注意的是,使用 Exception
抛出异常可能会导致代码结构不太清晰,因为它可以抛出任何种类的异常,包括系统内置的异常和自定义的异常。因此,如果想要更好地控制异常的类型和处理方式,建议还是使用专门的异常类或者自定义的异常类。
来源:https://juejin.cn/post/7208108117837660216
猜你喜欢
- 约定:import pandas as pdimport numpy as npfrom numpy import nan as NaN滤除
- 问题:pycharm无法调用pip安装的包原因:pycharm没有设置解析器解决方法:打开pycharm->File->Sett
- 问题场景:vue页面初始化展示请求后台返回的数据失败,没有报错<el-form-item label="有效日期"
- python中判断列表为空判断列表为空是一个非常基础的问题。但是也有很多写法。方法1:len()list = []if len(list)
- 本文实例为大家分享了python实现图片批量压缩程序的具体代码,供大家参考,具体内容如下说明运行环境:Win10 Pycharm
- 分离结构与表现的另一个重要方面是使用语义化的标记来构造文档内容。一个 XHTML 元素的存在就意味被标记内容的那部分有相应的结构化的意义,没
- 作用:用ASP程序将页面中的电话号码生成图片格式。 代码如下:<% Call Com_CreatValidCode
- (一)RabbitMQ的简介RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通
- folder.htm<html><head><title>闪亮日子之在线创建文件夹</title&
- 内容摘要: ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP开发环境提供了两种
- 最近一直在准备用来面试的几个小demo,为了能展现自己,所以都是亲自设计并实现的,其中一个就是在50行代码内来实现一个贪吃蛇,为了说明鄙人自
- 下面是例子分析表A记录如下: aID aNum
- 本文实例讲述了Python面向对象程序设计之类和对象、实例变量、类变量用法。分享给大家供大家参考,具体如下:类和对象:类的定义:用来描述具有
- 思路:在腾讯疫情数据网站F12解析网站结构,使用Python爬取当日疫情数据和历史疫情数据,分别存储到details和history两个my
- 例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://loca
- 本文实例讲述了php动态生成版权所有信息的方法。分享给大家供大家参考。具体实现方法如下:function copyright($start,
- 通过Vue-cli进行webpack打包的坑Vue-cli为Vue项目搭建的脚手架的确很方便,但打包时容易出现空白页,或者对应的静态资源加载
- 一、算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加 (+)、减(-)、乘(*)、除(/)和取模(%
- 学习了Go语言后,打算利用最近比较空一点,写一个前端部署工具,不需要每次都复制粘贴的麻烦,我们希望再部署开始之前和部署结束后推送钉钉消息创建
- 前言大家应该都有所体会,在不同的项目可能会使用不同的Django版本,兼任性是大问题,如果不幸要去接手不同版本的项目,比较惨烈!如果想重装一