第14章 异常处理
学习要点
会使用try...except…进行异常处理。
对标内容
理解程序的异常处理:try...except…结构语句。
情境导入
我们在使用Python语言写代码时,难免会弄出一些错误语句,而初学Python的青少年朋友往往不知道是哪里出了错,或者不知道自己错在哪里。要找出是哪行代码出错、错误的类型是什么、错在哪个细节,逐步分析,从而改正 错误,那就要引入“Python的异常处理” 。
异常就是程序运行过程中出现的错误或遇到的意外情况。错误的类型有语法错误、运行错误、逻辑错误。出错的理由通常是输入错误、下标越界、类型错误、 操作不当等。
try...except...格式
Python程序一般对输入有一定的要求,但当实际输入不满足程序要求时,可能会产生运行错误。为了保证程序运行的稳定性,此类运行错误可以被Python程序捕获并合理控制。
知识点详解
语法规则:
try:
<语句块1>
except:
〈语句块2>
当碰到错误语句,try代码块的剩余代码将会被忽略,except代码块的代码将被执行,如下例所示。
try:
a=8/0
print(a)
except:
print('除数为0的错误!')
运行结果:
'除数为0的错误!'
易错点
- 当碰到错误语句,try代码块的剩余代码将会被忽略。
- “except”容易拼写错误。
模拟考题
考题1 单选题
关于Python异常处理的作用,描述不正确的是()。
A. 当程序有输入错误时,可以让程序继续运行
B. 异常处理能够弥补程序的漏洞,让程序在任何情况下都不会终止运行
C. 当try语句中有错误时,不再执行try中剩余的代码
D. 当try语句中没有错误时,执行完try中剩余的代码就不再执行except 语句
答案:B
解析:异常处理只能让程序在有些情况下不会终止运行,所以选B。
考题2 判断题
异常处理结构中,try程序段中的每一个运行错误语句,都要转移到except 程序段中,执行异常处理语句。()
答案:错误
解析:有的错误情况还是会抛出错误提示。
try...except...except...格式
知识点详解
语法规则:
try:
<语句块1>
except 异常类型1:
〈语句块2>
except 异常类型2:
〈语句块2>
except:
〈语句块2>
当碰到错误语句,try代码块的剩余代码将会被忽略。根据错误的具体情况, 选择except代码块的代码执行,如下例所示。
try:
a=int(input('输入一个数'))
b=int(input('输入另一个数'))
m=a/b
print ('商是',m)
except ValueError:
print('输入的不是数字!')
except ZeroDivisionError:
print('除数为0!')
except :
print('其他错误!')
当输入的a、b都是数字,且b非0时,输出正常的数值。
当输入的a、b中有非数字时,运行结果如下。
'输入的不是数字!'
当输入的b为0时,运行结果如下。
'除数为0!'
除了上述3种情况,都会输出’其他错误!’。
易错点
- 要求识记关键字“ValueError"。
- 要求识记关键字“ZeroDivisionError”。
模拟考题
考题1 单选题
当发生异常时,下列描述不正确的是()。
A. 可以执行except模块,让程序继续运行
B. 异常处理能够弥补程序的漏洞,让程序在有些情况下不会终止运行
C. 当try语句中没有错误时,不再执行except中剩余的代码
D. 我们需要为每一个try模块设定且只能设定一个except模块
答案:D
解析:可以设定多个except模块,所以D不正确。
考题2 判断题
重复执行同样一段try...except…异常处理结构程序,except程序段中的语句可能会被执行,也可能不会被执行。()
答案:正确
解析:except程序段中的语句可能会被执行,也可能不会被执行,所以答 案正确。
try...except...else...finally...格式
知识点详解
语法规则:
try:
〈语句块1>
except:
〈诺句块2>
else:
〈语句块3>
finally:
〈语句块4>
当碰到错误语句时,try代码块的剩余代码将会被忽略,执行except语句块;
当try语句块正确时,try代码块执行完毕,执行else语句块;
不管try代码块正确与否,finally代码块均要执行,如下例所示。
try:
a=int(input('输入一个数 '))
b=int(input('输入另一个数'))
m=a/b
print('商是',m)
except:
print('错误!')
else:
print('正确!')
finally:
print('程序结束!')
当输入的a、b两个数都是数字,且b非0时,运行结果输出正常的数值, 之后再执行else与finally两个代码块。
当a、b中有输入错误时,运行时不执行try剩余的代码,执行except与 finally两个代码块。
总之,不管try语句有无错误,finally代码块一定会被执行。
易错点
- 这种异常处理格式容易与前面的两种异常处理格式混淆。
- finally代码块一定会被执行。
模拟考题
考题1 单选题
运行下列程序段时输入“yes”,则输出结果是( )
try:
x=eval(input())
print(x)
except NameError:
print("ok")
A. yes B. ok C.无法运行 D. 3
答案:B
解析:由于输入的对象类型错误,“yes”无法与eval()函数匹配,故转去执行 print("ok")。
考题2 判断题
在Python中,执行下面代码,无论输入什么数据,最后一行都会输出“程序结束”。()
try:
a=eval(input())
b=eval(input())
print(a/b)
except NameError:
print("错误2”)
except ZeroDivisionError:
print("错误1")
finally:
print("程序结束")
答案:正确
解析:finally语句一定会被执行。
try...except...except...else...finally...格式
语法规则:
try:
<语句块1>
except 异常类型1:
〈语句块2>
except 异常类型2:
〈语句块2>
except:
〈语句块2>
else:
〈语句块3>
finally:
〈语句块4>
当碰到错误语句时,try代码块的剩余代码将会被忽略,选择except代码块的代码执行;
当try语句块正确时,try代码块执行完毕,执行else语句块;
不管try代码块正确与否,finally代码块均要执行,如下例所示。
try:
a=int(input('输入一个数 '))
b=int(input('输入另一个数'))
m=a/b
print('商是',m)
except ValueError:
print('输入的不是数字!')
except ZeroDivisionError:
print('除数为0!')
except:
print('其他错误!')
else:
print('正确!')
finally:
print('程序结束!')
编程题示例:
while True:
try:
n=int(input('输入年份:'))
if n%4==0 and n%100!=0:
print('是闰年')
elif n%400==0:
print('是闰年')
else:
print('不是闰年')
except:
print('请输入合法的年份')
异常处理单元测试题
模拟考题
一、单选题(共15题,每题5分,共75分)
1、语句float('something') 抛出的异常名称为?( )
A. ValueError
B. ImportError
C. IndexError
D. FileNotFoundError
2、异常是指?( )
A. 程序设计时的错误
B. 程序编写时的错误
C. 程序编译时的错误
D. 程序运行时的错误
3、关于Python异常处理的作用,描述不正确的是?( )
A. 异常处理可以让程序不至于因为小错误而导致程序崩溃
B. 异常处理能够补充程序的漏洞,让程序在任何情况下都不会终止
C. 异常处理能够提高程序的容错性
D. 异常处理能够让程序变得更加友好
4、下列程序段在运行时输入"yes",则输出结果是?( )
A. yes
B. ok
C. 没有输出
D. 程序出错
5、键盘输入数字10,以下代码的输出结果是?( )
try:
n = input("请输入—个整数: ")
n= n*n
except:
print("程序执行错误")
A. 100
B. 10
C. 程序执行错误
D. 程序没有任何输出
6、下列不能用于异常处理结构中捕获特定类型的异常的语句是?( )
A. try-else语句
B. try-except语句
C. try-except-else语句
D. try-except-finally语句
7、下列选项不是Python异常处理可能用到的关键字?( )
A. try
B. else
C. if
D. finally
8、当try子句中没有任何错误时,一定不会执行语句?( )
A. try
B. else
C. except
D. finally
9、关于Python异常处理的解释,描述正确的是?( )
A. 一般情况下,在Python正常处理程序时也会发生一个异常
B. 异常处理增加了程序代码长度,降低了可读性
C. 在程序中加入异常处理会使程序出现错误
D. 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
10、异常处理的作用是不想让程序终止,如果出错了需要特殊处理。下列实现异常处理的语句是?( )
A. if /else
B. try/except
C. Warning
D. Error
11、关于Python在处理程序异常时,下列说法不正确的是?
A. 每一个try模块只能设定一个except模块
B. 执行except模块部分,可以让程序继续运行
C. 程序有错误时执行except中的代码,没有错误时执行try中的代码
D. 异常处理可以弥补程序漏洞,使得程序在一些情况下不会终止运行
12、Python的异常处理try....except...else...finally机制中,以下哪部分语句一定能得到全部执行?( )
A. try子句
B. except子句
C. else子句
D. finally子句
13、在try....except...else...finally异常处理机制中,如果发生异常则完全不会被执行的代码块是?( )
A. try代码块
B. except代码块
C. else代码块
D. finally代码块
14、请选择,下面代码运行之后的结果是?( )
a = '2'
b = '4'
try:
c = a * b
print(c)
except:
print('程序出错!')
else:
print('程序正确!')
A. 24
B. 8
C. 程序出错!
D. 程序正确!
15、编写程序代码时,我们经常会犯错,对于Python的异常处理,描述正确的是?( )
A. 可以用if…elif…else…进行异常处理
B. 异常处理可以弥补程序漏洞,让程序在任何情况下都不会终止运行
C. 通过异常处理语句,当程序输入错误时,仍可以让程序继续运行
D. 当遇到错误语句时,将执行try代码块语句
二、判断题(共5题,每题5分,共25分)
16、异常处理结构中,try程序段中的每一个运行错误语句,都要转移到except程序段中,执行异常处理语句。
正确 错误
17、try-except-else-finally异常处理结构中,不论try程序段中的语句有没有错误,else程序段中的语句都会得到执行。
正确 错误
18、语句try-except-finally中finally语句无论异常是否发生都必须执行的语句。
正确 错误
19、except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常。
正确 错误
20、在try-finally异常处理结构中,无论是否发生异常,都会处理最后的代码。
正确 错误
答案
一、单选题
1、A 2、D 3、B 4、B
5、C
试题解析:这里当输入10时,执行try后面的语句,n=10,所以此时程序只执行了输入语句,不执行except后面的语句。
6、A
试题解析:python的异常处理结构有:try…except结构 、try …except…else结构 、带有多个except的try结构、try…except…finally结构等。
7、C
试题解析:本知识点是学习异常处理基本语句用法
8、C
试题解析:本试题考察异常处理中的语句用法
9、D
试题解析:当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
10、B
试题解析:python中,try/except语句可以实现异常处理
11、A 12、D
13、C
试题解析:Python异常处理机制中,如果发生异常则完全不会被执行的代码块是else代码块
14、C
试题解析:变量a与b都是字符串,不能进行乘法运算,所以经过异常处理之后,会打印”程序出错!“。
15、C
试题解析:Python程序对输入有一定要求,当输入不满足程序要求,可能会产生运行错误,这类错误可以被捕获并合理控制。异常处理不是针对任何错误。发生错误时,将执行except代码块语句。
二、判断题
16、错误
17、错误
试题解析:异常处理结构中,没有异常的情况下执行else程序段中的语句。
18、正确
试题解析:无论try语句中是否抛出异常,finally中的语句一定会被执行。
19、正确
试题解析:except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
20、正确
试题解析:try-finally 语句无论是否发生异常都将执行最后的代码。