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
猜你喜欢
- 阅读上一篇:Freshow工具使用方法一. eval加密是在网马解密中最常见的,eval在jscript脚本中实际上是一个函数,简单可以理解
- 前言最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动
- 第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值:选项可选value值备注CURLOPT_AUTORE
- 做网站数据库,是选SQL Server还是Access好,可能您会说:选MySQL好,不过现在只是讨论IIS+ASP这种架构下的选择,不讨论
- 在这里我想有必要再较系统说一下ADO的各种对象的方法、属性。毕竟ADO不仅应用在ASP中,VB,VC都可以用到。在这十天中我想主要提到的对象
- 由于文件夹可能有多层目录,因此需要对其进行递归遍历。本文采取了简单的协议定制,定义了五条命令,指令Head如下:Sync:标识开始同步文件夹
- 一直用pycharm写代码一直用anaconda管理python环境但是今天我居然发现我不会更改pycharm当前的运行环境到我新建的ana
- 参考: Smashing magzine翻译+整理: Demix当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节。然而代码并不是马
- 年初的时候收藏过一篇关于mysqlreport的报表解读,和内置的show status,和show variables相比mysqlrep
- 本文实例讲述了php基于curl实现随机ip地址抓取内容的方法。分享给大家供大家参考,具体如下:使用php curl 我们可以模仿用户行为,
- 随着网页技术的发展,网络视觉设计与之前以程序员为主导的审美特征相比,具有了极大的改观。同时,随着美术、音乐、舞蹈人才的加入,网络开始在这一社
- 本文将演示如何使用SQL 7.0服务器的Enterprise Manager创建、配置一个示例数据库。我们还会演示如何增加具有合适权限的用户
- 很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知
- PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下1,在网站的结账页面,设置一个提交到PayPal网站的
- 谁在用这些导航google是个大公司,全世界都有google的脚印,韩国的google动画效果非常不错,蓝色理想论坛里已经有人挖过来了,可惜
- 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据访问效率。为什么索引能提高数据访问性能?他会不会有“副作用”?是不是
- 这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义。XML的推崇者认为
- 平时在写asp代码的时候有很多重复的内容要写,麻烦的要命,比如在收集表单提交的数据时,特别是表单的输入域比较多时,要不断写好多的reques
- 网页颜色变黑白代码国务院决定,为表达全国各族人民对青海玉树地震遇难同胞的深切哀悼,2010年4月21日举行全国哀悼活动,全国和驻外使领馆下半
- 一直也搞不清楚px与em之间的关系和特点,看过95%的中国网站需要重写CSS以后后确实收获很大。平时都是用px来定义字体,所以无法用浏览器字