抛出异常:

Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句和assert语句主动抛出。

使用raise语句抛出异常:

1.使用异常类引发异常

格式如下:

raise 异常类  #格式1:使用异常类名引发指定的异常

示例如下所示:

raise NameError

运行界面如下:

2.使用异常类对象引发异常

格式如下:

raise 异常类对象   #格式2:使用异常类的对象引发指定的异常

示例代码如下:

raise NameError()

运行界面如下:

以上代码中的raise之后的NameError()用于创建异常类对象。创建异常类对象时还通过字符串指定异常的具体信息。

示例代码如下:

raise NameError("索引下标超出异常")

运行界面如下所示:

 3.重新引发异常:

格式如下:

 raise  #格式3:使用刚出现过的异常重新引发异常

代码如下:

try:raise NameError
except:raise

运行界面:

以上示例中的try语句执行后会出现因raise语句引发的NameError异常,出现异常后except子句会被执行;except子句后的代码又使用raise语句抛出刚刚发生的NameError异常,最终程序因再次抛出异常而终止执行。

raise语句的语法格式总结如下:

1.raise 异常类  #格式1:使用异常类名引发指定的异常

2.raise 异常类对象   #格式2:使用异常类的对象引发指定的异常

3. raise  #格式3:使用刚出现过的异常重新引发异常

以上3种格式都是通过raise语句抛出异常。第1种格式和第2种格式是对等的,都会引发指定类型的异常。其中,第一种格式会隐式创建一个该异常类型的对象,第2种格式是最常见的形式,它会直接提供一个该异常类型的对象,第3种格式用于重新引发刚刚发生的异常。

使用assert语句抛出异常:

assert语句又称为断言语句,其语法格式如下所示:

assert 表达式[,异常信息]

以上语法格式的assert后面紧跟一个表达式,表达式的值为False时触发AssertionError异常,值为True时不做任何操作;表达式之后可以使用字符串来描述异常信息。

assert语句可以帮助程序开发者在开发阶段调试程序,以保证程序能够正确运行。

下面使用断言语句判断用户输入的除数是否为0,示例代码如下:

num_one = int(input("请输入被除数:"))
num_two = int(input("请输入除数"))
assert num_two !=0,'除数不能为0'
result=num_one/num_two
print(num_one,'/',num_two,'=',result)

运行界面:

以上代码首先会接收用户输入的2个数num_one和num_two,并将num_one和num_two分别作为被除数和除数;然后使用assert语句判定num_two不等于0,若不等于0则进行除法运算,否则会引发AssertionError异常,并提示"除数不能为0";最后输出num_one除以num_two的结果。

异常的传递:

如果程序中的异常没有被处理,默认情况下会将该异常传递到上一级,如果上一级仍然没有处理异常,那么会继续向上传递,直至异常被处理或程序崩溃。

示例如下:

代码示例如下:

def get_width():            #get_width()函数用于计算正方形边长print("get_width开始执行")num=int(input("请输入除数:"))width_len=10/numprint("get_width执行结束")return width_len
def calc_area():            #calc_area函数用于计算正方形面积print("calc_area开始执行")width_len =get_width()print("calc_area执行结束")return width_len*width_len
def show_area():         #show_area()函数用于输出正方形的面积try:print("show_area开始执行")area_val=calc_area()print(f"正方形的面积是:{area_val}")print("show_area执行结束")except ZeroDivisionError as e:print(f"捕捉到异常:{e}")
show_area()

以上定义的函数show_area()为程序入口,该函数中调用了calc_area()函数,calc_area()函数中又调用了get_width函数。

不出现异常时的运行机制:

通过对该程序的分析,可知,程序的入口为show_area( ),首先执行函数show_area(),这个函数里面有try-except判断异常机制,识别try子句,无异常的时候,根据代码,首先输出show_area开始执行,之后将calc_area()的值赋给area_val,通过代码可知,calc_area的值可通过上一级的calc_area函数得到,看这段代码,输出calc_area开始执行,之后将get_width的值赋给width_len,与上面相似,可知get_width函数开始运行,输出get_width开始执行,然后输入除数,然后输出get_width执行结束,calc_area执行结束,输出正方形的面积是多少,输出show_area执行结束!

运行界面如下:

有异常的运行机制:

因为只在show_area函数里面存在try-except异常识别机制,当get_width()函数使用变量num接收用户输入的除数,通过语句width_len=10/num计算正方形的边长,如果用户输入的除数值为0,那么程序会引发ZeroDivisionError异常。因为get_width()函数中并没有捕获异常的语句,所以get_width()函数中引发的异常向上传递到calc_area()函数,calc_area()函数中也没有捕获异常的语句,只能将异常继续向上传递到show_area()函数。

show_area函数中设置了异常捕获语句try-except,它在接收到由calc_area()函数传递的异常后,会通过try-except捕获并处理异常。

运行界面如图所示:

python抛出异常及异常传递相关推荐

  1. python 抛出异常_python 异常

    目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执行并且 ...

  2. python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常

    一. 抛出异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终 ...

  3. python错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  4. python常见错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  5. python错误-第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  6. python判断正确错误_第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  7. Python 错误和异常

    我们在执行程序语句的时候,经常会看到命令行输出报错信息,例如: >>> while True print('Hello world')File "<stdin> ...

  8. Python基础之:Python中的异常和错误

    文章目录 简介 Python中的内置异常类 语法错误 异常 异常处理 抛出异常 异常链 自定义异常 finally 简介 和其他的语言一样,Python中也有异常和错误.在 Python 中,所有异常 ...

  9. 怎么解决python遇到问题_新手常见Python错误及异常解决处理方案

    新手常见Python错误及异常解决处理方案,异常,错误,语句,子句,代码 新手常见Python错误及异常解决处理方案 易采站长站,站长之家为您整理了新手常见Python错误及异常解决处理方案的相关内容 ...

最新文章

  1. Boost:ping的测试程序
  2. html插入flash代码_初学者必备Web开发APP,支持代码补全,一键插入代码,厉害了!...
  3. 只允许对最后一条记录进行修改
  4. [语]××语录@××--第1篇
  5. 在网络中实现默认网关路由器冗余
  6. 模式识别 算法练习(一)——C均值算法
  7. 清除xcode缓存文件以及清楚mac 微信缓存
  8. 提取gps经纬度信息
  9. 以讹传讹的小故事大道理
  10. 怎样开启无线热点服务器,Win7开启无线WIFI热点
  11. 文本分析简历项目收集-----机器学习(仅供参考)
  12. 一文教你用 Neo4j 快速构建明星关系图谱
  13. 8. spark学习之旅(二)
  14. idea在mapper的xml文件中打不出‘.‘,idea在mapper的xml文件中打不出.,idea在mapper的xml文件中打不出小数点的问题
  15. 大小球实用技巧:程序实现“惊天反转”你想要的这里都有!
  16. aws部署web_运营酿酒厂解释了Amazon Web Services(AWS)
  17. 经典C语言程序设计100例,部分有个人注解
  18. sqlplus命令无需监听服务就可以登录本地数据库的登录方式的研究
  19. 苹果 Apple Watch 在测量人体血糖方面取得突破性进展,可实现无创、持续血糖监测,意味着什么
  20. previous implicit declaration of some_function was here

热门文章

  1. Endnote中的参考文献是网页,应该如何设置
  2. 10 亿个数取中位数
  3. 微信pc端扫码支付前后端流程(Node.js)
  4. Spark join和cogroup算子
  5. 趣图:普通人的煎蛋 vs 程序员的煎蛋
  6. 编程挑战之三角形内切圆与外接圆源码
  7. 水满自溢「限流算法第四把法器:漏桶算法」- 第303篇
  8. 绝地求生自定义服务器租一天多少钱,绝地求生自定义服务器怎么玩 绝地求生自定义服务器玩法解析...
  9. 人生苦短,我用PyCharm
  10. java map遍历最快_Java Map遍历速度最优解