『无为则无心』Python函数 — 38、Python中的异常
1、异常概念
定义:程序在运行过程当中,不可避免的会出现一些错误,可能经常看到的报错信息,例如:NameError
、TypeError
、 ValueError
等,这些都是异常。
程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行。所以当Python程序发生异常时,我们需要捕获并处理异常,否则程序就会终止执行,影响程序的正常执行。
2、了解异常
当检测到一个错误时,解释器就无法继续执行了,会出现一些错误的提示到控制台,这就是所谓的"异常"。
例如:以r
方式打开一个不存在的文件,就会抛出异常,我们在控制台中就能够看到。
open('test.txt', 'r')
像上面这种情况,我们在编写代码的时候,我们不确定一个语句是否一定会正确执行,这个时候就可以把这句可能出现的问题的代码,放入到异常语句中。
因为异常语句会尝试执行一行或一段可能发生错误的代码,万一发生错误可以执行另外一行或一段一定可以执行的代码,从而替代有错误的代码。以达到让程序不报错,可以继续向下执行程序。
总结:
Python程序运行时出现异常,目的并不是让我们的程序直接终止。
而是Python是希望在出现异常时,我们可以编写代码来对异常进行处理。
3、异常的写法
(1)语法
try:
可能发生错误的代码
except:
如果出现异常执行的代码(出现错误以后的处理方式)
(2)快速体验
需求:尝试以r
模式打开文件,如果文件不存在,则以w
方式打开。
try:
f = open('test.txt', 'r')
except:
f = open('test.txt', 'w')
(3)捕获指定异常
1)语法
try:
可能发生错误的代码
except 异常类型:
如果捕获到该异常类型执行的代码
说明:如果我们执行的代码有错误,且错误类型和
except
指定的异常类型一致,则执行匹配类型异常下定义的代码。
总结:
- 如果
except
后不跟任何的内容,则此时它会捕获到所有的异常。- 如果在
except
后跟着一个异常的类型,那么此时它只会捕获该类型的异常。
2)体验
"""
需求:尝试执行打印num,捕获异常类型NameError,
如果捕获到这个异常类型,执行打印:你的变量没有被定义
"""
# 结果:你的变量没有被定义
try:
print(num)
except NameError:
print('你的变量没有被定义')
注意:
- 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
- 一般
try
下方只放一行尝试执行的代码。
3)捕获多个指定异常。
有时候我们编写代码的时候,并不确定一行代码可能抛出哪种异常类型,可能就会多写几种异常类型。
当捕获多个异常时,可以把要捕获的异常类型的名字,统一放到except
后,并使用元组的方式进行书写。
try:
print(1/0)
except (NameError, ZeroDivisionError):
print('有错误')
只要尝试执行的异常代码,所抛出来的异常类型,和
except
后定义在元组中的任一异常类型相匹配,都能被捕获到。
不同类型的异常类型也可以分开写,如下:
try:
print(10/0)
except NameError:
print('出现 NameError 异常')
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
except IndexError:
print('出现 IndexError 异常')
4)何为异常类型何为异常描述信息。
在控制台查看的异常信息中,如NameError: name 'num' is not defined
,
冒号前NameError
,显示的就是异常类型。
冒号后name 'num' is not defined
,显示的就是异常描述信息。
5)捕获异常描述信息。
try:
print(num)
except (NameError, ZeroDivisionError) as result:
print(result)
# 或者
try:
print(10/0)
except NameError as e:
print('异常类型',e)
except ZeroDivisionError as e:
print('异常类型',e)
except IndexError as e:
print('异常类型',e)
as
是一个关键字,as
关键字后的变量就是捕获到的异常的描述信息,变量名是可以自定义的。
6)捕获所有异常。
Exception
是所有程序异常类的父类,所以如果except
后跟的是Exception
,也会捕获到所有的异常。
# 1.捕获所有异常
try:
print(num)
except Exception:
print("捕获异常了")
# 或者不写Exception
try:
print(num)
except:
print("捕获异常了")
# 2.捕获所有异常信息
try:
print(num)
except Exception as result:
print(result)
(4)异常中的else
else
表示的是如果没有异常要执行的代码。
try:
print(1)
except Exception as result:
print(result)
else:
print('我是else,是没有异常的时候执行的代码')
(5)异常中的finally
finally
表示的是,无论是否异常都要执行的代码。也就是说,不管前边代码是否正确执行,都必须只要执行的代码,就写在finally
中。例如关闭文件。
try:
f = open('test.txt', 'r')
except Exception as result:
f = open('test.txt', 'w')
else:
print('没有异常,真开心')
finally:
# 一般用于关闭所有打开的资源
f.close()
(6)总结
异常处理的完整结构,如下所示:
try语句
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
else:
代码块(没出错时要执行的语句)
finally:
代码块(该代码块总会执行)
说明:
try
是必须写的,可以将可能出错的代码放入到try
语句中,这样如果代码没有错误,则会正常执行。如果出现错误,则会执行expect
子句中的代码,这样我们就可以通过代码来处理异常, 避免因为一个异常导致整个程序的终止 。else
语句有没有都行。except
和finally
至少有一个 。
『无为则无心』Python函数 — 38、Python中的异常的更多相关文章
- 『无为则无心』Python函数 — 25、Python中的函数
目录 1.函数的使用 (1)定义函数 (2)调用函数 (3)使用函数的注意事项 2.函数的参数 3.实参的类型 Python函数的说明: Python中函数的应用非常广泛,前面章节中我们已经接触过多个 ...
- 『无为则无心』Python函数 — 26、Python函数参数的传递方式
目录 1.位置参数 2.关键字参数 3.缺省参数(默认参数) 4.不定长参数(可变参数) (1)包裹位置传递 (2)包裹关键字传递 5.位置参数.默认参数.可变参数的混合使用 6.拓展:参数解包 提示 ...
- 『无为则无心』Python函数 — 28、Python函数的简单应用
目录 1.函数嵌套调用 2.Python函数的简单应用 (1)打印线条 (2)函数计算 (3)打印图形 3.函数的说明文档 (1)函数的说明文档的作用 (2)函数说明文档的语法 (3)查看函数的说明文 ...
- 『无为则无心』Python函数 — 29、Python变量和参数传递
目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...
- 『无为则无心』Python函数 — 33、高阶函数
目录 1.高阶函数的定义 2.体验高阶函数 3.内置高阶函数 (1)map()函数 (2)reduce()函数 (3)filter()函数 1.高阶函数的定义 把函数作为参数传入(把一个函数作为另外一 ...
- 『无为则无心』Python函数 — 39、Python中异常的传播
目录 1.异常的传播 2.如何处理异常 1.异常的传播 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播.如果函数中没有对异常进行处理,则异常会继续向函数调用者传播.如果函数调 ...
- 『无为则无心』Python基础 — 4、Python代码常用调试工具
目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...
- 『无为则无心』Python基础 — 6、Python的注释
目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...
- 『无为则无心』Python基础 — 7、Python的变量
目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...
- 『无为则无心』Python基础 — 9、Python字符串的编码与转义
目录 1.查看变量类型 2.转义字符 (1)转义字符说明 (2)示例 (3)常用转义字符对照表 3.字符编码 (1)字符编码介绍 (2)Python中的字符编码 (3)编码格式应用于不同场景 提示:上 ...
随机推荐
- c++设计模式概述之命令
代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做. 1.概述 命令模式是一种数据驱动的模式.将请求封装到命令的对象中,再传给调用对象,调用对象再处理该命令. [将一个请求封装为一个对象] ...
- 【LeetCode】5686. 移动所有球到每个盒子所需的最小操作数 Minimum Number of Operations to Move All Balls to Each Box
作者: 负雪明烛 id: fuxuemingzhu 公众号:负雪明烛 本文关键词:LeetCode,力扣,算法,算法题,交替合并字符串,Merge Strings Alternately,刷题群 目录 ...
- 【LeetCode】241. Different Ways to Add Parentheses 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:递归构建所有表达式 方法二:分而治之 日期 ...
- 【LeetCode】707. Design Linked List 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Sublime Text 3菜单栏隐藏后怎么显示
Sublime Text 3如何显示菜单栏 今天在使用Sublime Text 3敲代码的时候不小心就把上侧的菜单栏隐藏了,自己鼓捣了半天才把菜单栏弄出来,下面我就给大家讲解一下我是如何操作的 键盘按 ...
- Normalization Methods
目录 概 主要内容 Batch Normalization Layer Normalization Instance Normalization Group Normalization Ioffe S ...
- Python Revisited Day 08 (高级程序设计技术)
目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...
- 定义制造业操作(定义 MES/MOM 系统)
定义制造业操作(定义 MES/MOM 系统) 制造业操作包含众多工厂级活动,涉及设备(定义.使用.时间表和维护).材料(识别.属性.位置和状态).人员(资格.可用性和时间表),以及这些资源与包含其信息 ...
- CS5216 设计于DP转HDMI转换器|DP转HDMI 1080P中继器 电平转化器开关设计方案与线路图
CS5216是一款Displayport to hdmi 1080p音视频信号转换芯片,主要用于设计与开发DP转HDMI 转换器.中继器.电平转换器等产品当中.它支持交流和直流耦合TMDS信号高达1. ...
- Java基础周测一、二(50题)
一.单选题 (共50题,250分) 1.下列选项不可作为Java语言变量名的是( ). A. a1 B. $1 C. _1 D. 21 正确答案: D 2.有一段Java应用程序,它的类名是a1 ...