Python核心编程第二版 第十章课后答案

10.1 

引发异常。以下的哪个因素会在程序执行时引发异常?注意这里我们问的并不是异常

的原因。

a) 用户;

b) 解释器;

c) 程序;

d) 以上所有;

e) 只有 b) 和 c);

f) 只有 a) 和 c)

f

 

10-2.引发异常。参考上边问题的列表,哪些因素会在执行交互解释器时引发异常?

f

  

10-3.关键字。用来引发异常的关键字有哪些?

raise

  

10-4.关键字。try-except和try-finally有什么不同?

try-except:当try代码块运行出错,except代码块才会被执行(匹配到相应异常时),处理完异常后try-except后的代码会继续往下执行;

try-finally:不管try代码块是否出现异常,最终都会执行finally里的代码。如果出现异常,执行完finally代码块后,异常会继续往上层抛。

i = 1
try:
    num = 10%i
except:
    print('except')

try:
    num = 10%i
finally:
    print('finally')
输出:finally

 

10-5.异常。下面这些交互解释器下的Python代码段分别会引发什么异常(参阅表10.2给出的内建异常清单):

(a)>>>if 3 < 4 then:print '3 is less than 4!'

(b)>>>aList = ['Hello','World','Anyone','Home?']

>>>print 'the last string in aList is: ',aList[len(aList)]

(c)>>>x

(d)>>>x = 4 % 0

(e)>>>import math

>>>i = math.sqrt(-1)

(a) SyntaxError: invalid syntax
(b) IndexError: list index out of range
(c) NameError: name 'x' is not defined
(d) ZeroDivisionError: integer division or modulo by zero
(e) ValueError: math domain error

  

10-6.改进的open()。为内建的open()函数创建一个封装。使得成功打开文件后,返回文件句柄:若打开失败则返回给调用者None,而不是生成一个异常。这样你打开文件就不需要额外的异常处理语句。

def try_open(filename,mode = 'r'):
    try:
        f = open(filename,mode)
    except IOError:
        return None
    return f      

 

10-7.异常。下面两端Python伪代码a)和b)有什么区别?考虑语句A和B的上下文环境。(这么细致的区别要感谢Guido!)

(a)try:

  statement_A

    except . . .:

    . . .

 else:

 statement_B

 

(b) try:

  statement_A

  statement_B

 except . . .:

    . . .

情况1: 如果statement_A执行出错,则(a)和(b)都不会执行statement_B;
情况2: 如果statement_A执行正常,则(a)和(b)都会执行statement_B——但是,如果statement_B的执行也出错,(b)可以在except子句里捕获到异常并做处理,而(a)则只能将statement_B产生的异常抛给上层调用者。

  

posted @ 2017-09-07 11:49  闪电旅途  阅读(334)  评论(0编辑  收藏  举报