当前课程知识点:计算思维与人工智能基础 >  第三部分:python基础 >  第五章:程序控制结构 >  5.5异常处理

返回《计算思维与人工智能基础》慕课在线视频课程列表

5.5异常处理在线视频

下一节:6.1函数的定义与调用

返回《计算思维与人工智能基础》慕课在线视频列表

5.5异常处理课程教案、知识点、字幕

大家好

我们下面给大家介绍Python的异常处理

任何程序在运行中都可能产生错误

和大多数计算机语言一样

Python在无法正常处理程序时呢

就会发生一个异常

异常呢就是一个Python的对象

表示一个错误及错误触发异常

异常就是我们程序运行时候发生错误的信号

在程序出现错误的时候呢会产生一个异常

若程序没有处理他呢

则会抛出该异常

程序的运行也随之结束

Python中有两种错误很容易辨认

一个是语法错误

另一个就是异常

我们首先来看一下这些语法错误

那么语法错误其实是过不了Python解释器的语法检测的

在程序执行前呢

就会被检测出来

首先检测语法错误

然后呢再检测逻辑错误

那么在Python解释器的是这样子

我们来看如果你写了个if

忘写条件或者写完条件忘写了冒号

那么这个都是什么呀

语法错误啊

他在执行的时候都会给大家检查出来

或者print没有写另外一个括号

那么也会写出来语法错误

另外一种错误就是逻辑错误

逻辑错误呢是在代码中呢他会抛出一个异常

比如说for i in 3

那么这个代码这段代码在执行的时候

他就抛出一个类型的异常

因为呢

3是一个整型类型的这个对象

他是不可以迭代的

或者说我们看下面这段代码会有一个错误

抛出来一个什么值的错误

如果我们输入的这个input的这个值

给了一个字符串的类型的话

他不能够正常转换为整形

所以他会抛出一个异常

值的错误的异常

另外的话

我们像if x大于3

print(x)

那这段代码里面呢

如果x之前是没有给赋值的

那这时候呢

x这个变量是没有定义的

会报出一个什么命名的一个错误

下面这是一个

索引的错误

定义了一个列表

那么列表的下标是0,1

但是你要访问下标为3的这个列表里的元素

它报出什么啊

下标越界啊

还有一个呢

我们常出现的就是我的除0的这个错误

如果是除法的时候

除数是0的时候呢

他会去报一个错误就是除数为0的这样的错误

在Python中的我们常见的一些异常有

属性的这个异常

那他主要的含义就是试图访问一个对象没有的属性

比如说我们foo.x

但是foo其实个对象是没有这个x这个属性的

IOError是输入输出异常

常出现的错误就是提示无法打开这个文件

另外一个是Import 异常

无法引入模块或者包就是导入的路径的问题

或者是名称的错误

IndentationError就是我们的语法的错误

其实这个就是我们缩进有问题

另外就是我们刚才说的这个IndexError

就是把下标越界啊

这是

还有一个KeyError就是试图访问字典里不存在的键

NameError使用一个未被赋值对象的一个变量

SyntaxError就是把代码非法

就是代码不能编译啊

通常是语法错误

TypeError就是我们类型错误

传入对象的类型与要求的不符合

UnboundLocalError是试图访问一个还未被设置的局部的变量

那么这个情况就是你已经有了一个同名的全局变量在用啊

那你在用当成局部变量去用的时候就会发生这样的错误

ValueError是传入一个调用者不期望的值

即使值的类型是正确的

那么这个传入的类型正确

那也可能会发生什么ValueError

异常处理

Python中的异常处理是Python解释器检测到错误

触发异常

程序员编写特定的代码

专门用来捕获这个异常

如果捕获成功

则进入另外一个处理分支

执行为其定制的逻辑使程序不会崩溃

这就是异常处理的过程

可预知的异常处理

如果错误发生的条件是可预知的

我们需要用if语句进行处理

在错误发生之前进行预防

我们来看下面这段代码

这段代码是一个猜数字的游戏

如果猜中就跳出

所以我们知道的预知的条件就是我们输入的这个字符串

是数字组成的呢

我们就把它进行转换

然后进行判断

如果非数字的

我们就通过我while true循环呢

让他跳过跳过循环过

是这样的一个过程

我们来看一下

在这jupyter下这段代码的执行过程

那我们执行这段代码

我们首先输入一个字符串啊

那我们可以看他执行后

他不会报错啊

没有猜中

那我们在再输一个数字的也没有猜中

直到我们猜中

那么这段代码跳出结束啊

这就是我们可预知异常的处理

那大部分情况的我们的异常是不可预知的

那么如果发生的条件是不可预知的

我们这时候就可以用try...except

那在错误发生之后进行处理

那么它的语法结构就是

try

被检测的代码块

except检测异常类型

那么满足这个except的异常类型那么就执行啊

之后为其制定的代码段

我们来看右边这段代码

我们通过try来检测这个print的语句能不能够正常输出

那如果检测出他的异常

那就是类型错误的时候

就输出这段文字

类型不同不能相加

那么给的这个a如果是一个字符类型的话

那他就会检测出来是错误的啊

就发生异常啊

如果我们给的是一个正常的

a是7的时候呢

他就可以正常输出我们求和后的值

多分枝的异常

当我们检测的时候呢

我们对我们的错误类型可以通过多分枝来去检测

那么这个except

except三个except是平行的

那么检测到一个

他就跳出这个except

执行下面的

也可以通过try去检测这个

我们如果对我们要检测的异常的类型不是很清楚的时候

我们可以通过这些异常类型的一个

Exception去检测

那我们也称之为一个万能异常的一个检测

然后检测到以后执行下面的这段代码

那么另外的话

我们的其实try...except一个完整的结构呢

是下面的这样子的

try 要检测的一个代码

然后呢except是触发异常执行代码

那如果没有触发异常

他就执行else后面的这段代码

finally后面的是不管有没有异常

触发了它都会执行这段代码

我们也来看右边这段代码的执行过程

那么可以看到try这个地方呢

是要转换s1

这个s1给了一个字符串

那么这时候呢

他会就会捕获一个错误

会捕获一个什么呀

他是一个值的一个错误

那这个值的错误捕获了以后呢

就输出我们这个错误3

那么这个不能正常转换这个s1

finally后面呢都是要输出的

如果给的我们的给的代码是

给的是一个数字的字符串呢

那他就可以正常的转换

那这时候呢

他就可以执行完这一段的以后呢

except except 都没有捕获的话

他就执行else后面输出try这段代码段没有异常的这个文字的输出

然后finally输出

把它执行的过程是这样子

那么最后呢

我们可以使用raise触发异常

那么使用raise抛出一个指定的异常

也是看一下我们这个这段代码

那么这段代码是输入了一个math的一个模块

就是我们常用的算术运算了一些函数包含在里面

那这个里面我们要用他的一个平方根

那么输入这个数字如果是小于0的话呢

这个数字他就会抛出一个异常

那么可以看到我们执行以后呢

输入一个5的时候呢

他就输出5的平方根

那这边的如果我们输入一个什么呀

-9的时候呢

他就会抛出异常

抛出异常他告诉我们是这一句出现问题是什么呀

数值不能为负

那我们同样在jupyter下面看一下我们前面这些代码的执行过程

好了我们看这个

不可预知的多分支的这个异常的检测

我们来可以看一下这个给了一个s1是一个字符串

s2是一个字典类型

那我们如果我们下面只有这条这几条语句

我们看看他们都可能发生什么错误

第一条呢try里面int这是不能正常转换的

我们执行以后可以看的到

他是什么呀

是3啊

就是值的一个错误

不能够正常转换啊

我们再如果把它标注了看后面的有没有问题

我们看看下面就print这个语句

print(s1[9])

我们可以看到s1里面下标为9

执行的话他会捕获一个错误

就是我们下标越界的这样一个错误

所以是错误一

我们再看看下面一个print语句

print这个字典s2里面键值是namek的

那么看这里面有没有呀

那没有

他也会捕获到错误

运行可以看到捕获了错误是2

就是这个键值的这个错误

这是多分支的一个异常的捕获

那我们也还可以通过try这个Exception

把他的Exctption来去捕获

一样他可以捕获到一个错误

那么这个错误就是我们这个他的一个

一个转换了一个错误

也可以通过多分支加一个万能的错误

我们可以看的到我们在这个地方的时候

这是也是多分支下面是捕获的时候它可以是1,2

前面的IndexError或者ValueError

这个都不是的时候呢

可以看看是不是Exception

这时也是一个多分支和万能分支的一个捕获的一个错误

我们来看前面的这些错误呢

我们可以运行下可以看到

那么还是一个什么呀

他捕获到一个

捕获到这个ValueError

第一个而这样的一个错误

这个里面如果不是这三个错误的话

他就可以捕获的是一个Exception

最后看一下这个try...finally

try...finally的话我们当hello是有错的时候

hello是字符串的时候转换时有错误

那么就捕获到异常

捕捉到异常输出

我们可以看print语句和else它的输出

那么这个有捕获的异常finally是正常输出

如果我们是这个地方给的是一个数字

那么可以看到else这段代码就可以执行

那么else这段代码也可以正常执行

这最后是我们可以看的到通过raise来指定抛出异常的这样的一段代码

我们也是运行

我们输入一个-6

他就捕获到一个异常数值

那我们如果是输入的是正常的时候

他就给我们正数大于0的数据

大于0的他就给我们输出正常的平方根

上面我们介绍了异常处理的不同的方式

那么有异常处理呢

那其实在我们写代码时候是有许多好处的

首先把错误处理和真正的工作分开来

第二呢就是代码更容易组织

更清晰复杂的工作任务更容易实现

程序也变得更安全了

不至于由于一些小的错误

或者输入而使程序意外崩溃

那我们这一章的主要给大家介绍了程序控制

选择是如何控制的

循环是如何控制的

以及我们最后异常处理是如何控制的

那这一章的我们就给大家介绍到这

计算思维与人工智能基础课程列表:

第一部分:计算思维

-1.计算思维的提出

-2.计算思维的要素与应用

-3.培养计算思维

-4.智能时代的教师与教学

-章测试

第二部分:人工智能

-1.人工智能的发展

-2.人工智能的实现与机器学习

-3.人工智能产业

-章测试

第三部分:python基础

-第一章:python简介

--1.1python的介绍

--1.2.anaconda的安装

--章测试

-第二章:编码规范

--2.1 python编码规范

--2.2常量和变量

--章测试

-第三章:数据类型

--3.1数据类型概述

--3. 2.数据转换

--3.3数据类型区别

--章测试

-第四章:基本运算

--4.1.基本运算符

--4.2比较运算符

--4.3逻辑运算符

--4.4位运算符

--4.5成员运算符与身份运算符

--4.6运算符的优先级

--章测试

-第五章:程序控制结构

--5.1顺序结构

--5.2条件结构

--5.3循环结构

--5.4跳转结构

--5.5异常处理

--章测试

-第六章:函数、模块与面向对象

--6.1函数的定义与调用

--6.2面向对象

--6.3魔法函数的应用

--6.4模块与包

--章测试

-第七章:文件操作

--7.1文件的打开与读取

--7.2文件的写入

--7.3CSV模块的应用

--章测试

-第八章:python生态库

--8.1第三方库的安装

--8.2标准库-Os库与Sys库

--8.3.标准库-Time库

--8.4标准库-Random库

--8.5标准库-Turtle库

--8.6第三方库-词云库

--8.7第三方库-pyinstaller库

--8.8第三方库-numpy库(上)

--8.9第三方库-numpy库(下)

--8.10第三方库-pandas库

--8.11第三方库-matplotlib库

--章测试

-第九章:TensorFlow基础

--9.1TensorFlow简介

--9.2TensorFlow 2.0的改进

--9.3TensorFlow的数据应用

--9.4 TensorFlow的设备应用

--9.5.TensorFlow中常用操作

--章测试

-第十章:实例分析与实践

--10.1认识回归问题

--10.2房价的预测

--10.3手写数字识别

--10.4卷积神经网络的介绍

--10.5全连接网络的搭建

--10.6卷积神经网络的实现服饰图片的分类

--10.7LeNet的介绍

--章测试

-第十一章:人工智能在自然语言中的应用

--11.1自然语言处理

--11.2命名实体识别技术

--11.3词向量表示

--11.4自然语言处理的挑战及应用

--章测试

5.5异常处理笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。