无字天书之Python第十一页(异常处理)
博客目录
- 传送门
- 正文
传送门
无字天书之Python第一页
无字天书之Python第二页
无字天书之Python第三页
无字天书之Python第四页
无字天书之Python第五页
无字天书之Python第六页
无字天书之Python第七页
无字天书之Python第八页
无字天书之Python第九页
无字天书之Python第十页
正文
前面我们已经写了这么多示例代码了,对于报错信息各位同学可能都已经司空见惯了,今天我们就来聊一下报错信息的处理。
首先,程序在运行的过程中,产生了异常,这时,我们可能会有两种想法,第一种是针对这个异常做某些特殊的处理来进行程序的降级处理;第二种是希望程序忽略这个异常继续执行下去,这个异常可能并不干扰主逻辑的执行。
那这个时候我们怎么办呢?
有编程经验的同学马上就想到了,那我们去 try 它啊,在 Python 中,我们同样可以去 try 它,从字面意思上理解就已经非常清晰明确了,以下的内容是要尝试执行的。
语法
try:...(可能产生异常的代码)
except:...(产生异常后的处理代码)
但是,还会有一种情况,不管上面的代码有没有出错,有一部分代码我们总希望它能执行,这时,我们可以添加另一个关键字 finally 。
从字面意思可以就可以看出来,这个是最后要执行的意思。
语法
try:...(可能产生异常的代码)
except:...(产生异常后的处理代码)
finally:...(一定要执行的代码)
拟定场景:我们定义一个除法函数,如果除数不为 0 ,是可以正常返回值的,如果除数为 0 ,那么整个程序肯定会直接异常报错。
def chufa(x,y):try:return x / yexcept:print('错误')return None
print(chufa(15,5)) #3.0
结果为:3.0
这个时候程序是正常输出的,这时我们修改参数
print(chufa(15,0)) #错误 None
结果为:错误 None
可以看到,这里打印了我在程序中设置的 None
,并没有之前的红色的异常信息抛出。这里的 except
会捕捉我们所有的异常信息,但是,异常信息也是有很多分类的,比如我们之前遇到过的访问字典中不存在的 key 的异常 KeyError
,比如我们刚才捕捉到的 ZeroDivisionError
异常,还有也是我们之前遇到过的数组下标越界的异常 IndexError
。
比如这里的代码我可以捕捉更加详细的异常信息 ZeroDivisionError
。
def chufa(x,y):try:return x / yexcept ZeroDivisionError:print('错误')return Noneprint(chufa(15,5)) #3.0
print(chufa(15,0)) #错误 None
结果一样
那么,看到这里,你可能会有一个疑问,我们为什么要对异常分类,直接抓取所有异常不是更方便么?
当然,对于逻辑比较简单的程序,直接捕捉所有异常是更方便的,但是在某些特定的业务场景下,一段程序可能会抛出多种异常,我们希望根据异常种类的不同,定制不同的解决方案,至少我们知道当前的程序是抛出了什么异常,这时,程序异常分类就显得尤为重要。
我们这里演示一下,如果我们输出的值不是数字,是字符串的话。。。。
def chufa2(x,y):try:return x/yexcept ZeroDivisionError:print('输入的除数为0!')return Noneexcept TypeError:print('类型错误!')return None
print(chufa2('only老K',0))
结果:
类型错误!
None
对的,你没有看错,异常信息是能捕捉多个的,是可以并排写的。至于先抛出那个,就要看那个异常先发生了。
上面我们还提到了 finally ,我们接着来演示 finally 这个关键字的使用。
def chufa3(x,y):try:return x/yexcept ZeroDivisionError:print('您输出的除数为 0 !!!')return Noneexcept TypeError:print('您输出的参数类型非法!!!')return Nonefinally:print('only老K,我为自己带盐')print(chufa3(15,3))
print(chufa3('only老K',0))
结果:
only老K,我为自己带盐
5.0
您输出的参数类型非法!!!
only老K,我为自己带盐
None
无字天书之Python第十一页(异常处理)相关推荐
- 无字天书之Python第十三页(生成器基础)
博客目标 传送门 正文 传送门 无字天书之Python第一页 无字天书之Python第二页 无字天书之Python第三页 无字天书之Python第四页 无字天书之Python第五页 无字天书之Pyth ...
- 无字天书之Python第五页(基础运算符)
博客目标 传送门 基础运算符(六大类) 算术运算符 比较运算符 赋值运算符 并列赋值问题 逻辑运算符(三种) 成员运算符 身份运算符 函数id() 本周第二更 一支预防针打给你,全文内容较长,花点时间 ...
- 无字天书之Python第八页(基础数结构—下)
文章内容 传送门 前言 dict 简单使用 CURD 内置函数和方法讲解 set 简单使用 集合的CRUD 内置函数和方法 过年不停更之第二更... 内容比较长,耐心看耐心写,小编也不容易...... ...
- 无字天书之Python第四页(变量基础)
blog 传送门 变量 变量基础 变量类型转换 全部代码 本周第一更 传送门 无字天书之Python第一页 无字天书之Python第二页 无字天书之Python第三页 变量 不懂什么是变量的自己翻到第 ...
- 无字天书之Python第十页(基本文件操作)
博客目标 传送门 绝对路径和相对路径 打开文件 编码格式 OS模块 传送门 无字天书之Python第一页 无字天书之Python第二页 无字天书之Python第三页 无字天书之Python第四页 无字 ...
- 无字天书之Python第六页(条件判断与循环)
内容大体 传送门 条件判断 if-else if-elif-else 分支语句嵌套 循环语句 简单while while死循环 for循环 range()函数 循环中断 break continue ...
- 无字天书之Python第七页(基础数据结构—上)
博客内容 传送门 前言 list列表 list列表的基本操作 通过索引取出列表的元素 列表连接 列表循环遍历 for while 查看list中是否有某个元素 删除列表以及列表中的值 获取最大值 li ...
- 无字天书之Python第三页(字符串内容)
blog内容 前言 传送门 字符串 字符串常用方法 获取字符串的长度 字符串拼接 重复输出字符串 获取字符串中的某一个字符 获取字符串中的某一串字符 包含字符串和不包含字符串 代码示例 前言 现在开始 ...
- 无字天书之Python爬虫第一页
博客内容 主体 什么是爬虫? 为什么要用爬虫? 各路神仙没有丝毫反馈啊-小编更新的没有动力了啊 许久不见,并不是被感染了,别怕啊,咱不会隔着电脑把你传染了... 放在CSDN草稿箱中太久了-拿出来更新 ...
最新文章
- Distilling the Knowledge in a Neural Network 论文笔记蒸馏
- c语言程序头文件作用,C语言头文件
- U盘安装Centos6.3 续
- ThinkPHP函数详解:M方法
- 老大难的空指针,如何优雅处理?
- iphone计算机快捷键,苹果电脑快捷键大全,最常用的都在这里了
- BZOJ2843:极地旅行社
- 爬虫521错误(又是一次和可爱的前端vs的故事)
- Linux7/Redhat7/Centos7 安装Oracle 12C_安装Oracle软件_04
- ViewBag ViewData
- hdu4135容斥原理 组合遍历
- antd的select的滚动条怎么才会出现_纵向滚动条对横向滚动条的影响
- css宋体代码_CSS字体代码
- Filenet路线更新及新版官网上线公告 ​
- 嵌入式系统开发环境的构建08:在Hyper-V中安装Windows XP操作系统
- 洛谷P5706 【深基2.例8】再分肥宅水__C++描述
- 从智能交通案例看物联网成功的关键
- CentOS Linux操作系统
- Django cache redis 最全介绍
- PTA 特立独行的幸福 (25分)