第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的错误!'

易错点

  1. 当碰到错误语句,try代码块的剩余代码将会被忽略。
  2. “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种情况,都会输出’其他错误!’。

易错点

  1. 要求识记关键字“ValueError"。
  2. 要求识记关键字“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代码块一定会被执行。

易错点

  1. 这种异常处理格式容易与前面的两种异常处理格式混淆。
  2. 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",则输出结果是?( )

image.png  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 语句无论是否发生异常都将执行最后的代码。

Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-07-02 09:56:31