python中异常的传播详解
作者:繁华似锦Fighting 发布时间:2021-12-20 11:31:05
1、异常的传播
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播。如果函数中没有对异常进行处理,则异常会继续向函数调用者传播。如果函数调用者处理了异常,则不再传播,如果还没有处理,则继续向他的调用者传播,直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息到控制台。所以异常的传播我们也称之为抛出异常。
异常传播示例如下:
def fn1():
print('Hello fn')
print(10/0)
def fn2():
print('Hello fn2')
fn()
def fn3():
print('Hello fn3')
fn2()
fn3()
输出结果:
说明输出结果:
当我们调用fn3()
方法的时候,会先输出Hello fn3
,再向下执行调用fn2()
方法,以此类推到fn1()
方法中。可以看到上边有三条输出语句。
当执行到fn1()
方法中print(10/0)
语句,出现了ZeroDivisionError
异常,而fn1()
方法中没有处理该异常,则向他的调用者抛出这个异常,抛给了fn2()
方法,以此类推,知道fn3()
方法抛给了全局作用域中的调用者,异常依然没有被处理。
最后Python的解释器会把这个异常显示在控制台中。
所以我们看到异常结果中,一行报错,向上抛了好几次。
例如:全局作用域中的代码有异常没有处理的话,就直接显示在控制台中了。
print(10 / 0)
输出结果:
2、如何处理异常
在异常抛出后的任何一个调用者处理该异常都可以。
异常处理如下:
def fn1():
print('Hello fn')
print(10 / 0)
def fn2():
print('Hello fn2')
fn1()
def fn3():
print('Hello fn3')
fn2()
try:
fn3()
except :
print("异常我已经处理过了。")
"""
输出结果:
Hello fn3
Hello fn2
Hello fn
异常我已经处理过了。
"""
# 我在全局作用域的地方进行了异常处理,
# 也可以在其他地方进行处理,不管在哪里处理,
# 最后都不会把错误抛向控制台的。
提示:
当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中。而异常传播时,实际上就是将异常对象抛给了调用者。
而不同的错误,会对应着不同的异常对象(也就是前边说的异常类型)。
如何查看Python异常对象?
在Python的本地文档中,找到[The Python Standard Library] —> [Built-in Exceptions],里面全是我们Python中的异常对象以及说明。
如下图所示:
来源:https://www.cnblogs.com/liuyuelinfighting/p/15845826.html
猜你喜欢
- 使用方法:terminal中输入python weather.py http://www.weather.com.cn/weather/10
- 1、并双击新建工程窗口中ActiveX DLL图标,VB将自动为项目添加一个类模块,并将该项目类型设置为ActiveX DLL。2、在属性窗
- 今天我们整理了ip地址和身份证的javascript验证方法。虽然ip地址和身份证的验证不是很经常会遇到,但是大家也可以研究一下js代码,里
- 可能有些地方翻译得不好,请见谅在这个冠冕堂皇的标题之下,我想回答一个土方,有人在博客提出很久了。该土方很好的描述了很多图标设计师所面临的典型
- pip用pipdeptree查看包依赖1、安装pipdeptreepip install pipdeptree2、使用pipdeptree查
- 今天在我的Centos6.5机器上安装 Django 开发环境,在安装完使用 “django-admin.py startproject m
- 简介scrapy 是一个 python 下面功能丰富、使用快捷方便的爬虫框架。用 scrapy 可以快速的开发一个简单的爬虫,官方给出的一个
- 本文为大家分享了virtualenv建立多个Python独立虚拟开发环境,供大家参考,具体内容如下1、安装virtualenv:pip in
- 本节内容:1.前言2.相关概念3.Python中的默认编码4.Python2与Python3中对字符串的支持5.字符编码转换一、前言Pyth
- ccs的优点:css相对xpath语法比xpath简洁,定位速度比xpath快css的缺点:css不支持用逻辑运算符来定位,而xpath支持
- 1 九九乘法表for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j
- 我是一个初入互联网的视觉设计师,和以往做设计感受最大的不同就是:一个设计的最终定稿会受到多方面的挑战,有来自产品经理的,来自开发的,来自测试
- 在SQL Server 2008里安装审计,步骤如下:1. 给每个SQL Server 2008具体实例创建一个SQL Server审计2.
- 前言本文使用 cpu 版本的 TensorFlow 2.4 ,分别搭建单层 Bi-LSTM 模型和多层 Bi-LSTM 模型完成文本分类任务
- 一、什么是框架框架的本质就是一个socket服务,可以完成不同主机之间的通信。它是一个半成品的项目,其中可能已经封装好了基本的功能,比如路由
- 本文实例讲述了python使用datetime模块计算各种时间间隔的方法。分享给大家供大家参考。具体分析如下:python中通过dateti
- 本次爬取网站为opgg,网址为:” http://www.op.gg/champion/statistics”由网站界面可以看出,右侧有英雄
- 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛。在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都
- 模版结构优化引入模版有时候一些代码是在许多模版中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代
- 很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头。后来工作中深刻体会到,合理使