Python核心编程第十章客后练习答案

10.1引发异常;a)用户;;b)解释器;;c)程序;;d)以上所有;;e)只有b)和c);;f)只有a)和c);答案:f;10-2.引发异常;10-3.关键字;答案:raise;10-4.关键字;答案:;try-except:当try代码块运行出错,e;try-finally:不管try代码块是否出现;10-5.异常;(a)>>>if3&


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代码块后,异常会继续往上层抛。

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

if __name__ == "__main__":

print try_open('test1.txt')

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产生的异常抛给上层调用者。

10–8.改进的raw_input()。本章的开头,我们给出了一个”安全”的float()函数,它建立在内建函数float()上,可以检测并处理float()可能会引发的两种不同异常。同样,raw_input()函数也可能会生成两种异常,EOFError(文件末尾EOF,在Unix下是由于按下了Ctrl+D在Dos下是因为 Ctrl+Z)或是KeyboardInterrupt(取消输入,一般是由于按下了Ctrl+C)。请创建一个封装函数safe_input(),在发生异常时返回None。

答案:

def safe_input(example):

symbol = None

try:

symbol = raw_input(example)

except (EOFError, KeyboardInterrupt):

pass

return symbol

if __name__ == '__main__':

print safe_input('please input: ')

10-9.改进的math.sqrt()。math模块包含大量用于处理数值相关运算的函数和常量。不幸的是,它不能识别复数,所以我们创建了cmath模块来支持复数相关运算。请创建一个safe_sqrt()函数,它封装math.sqrt()并能处理负值,返回一个对应的复数。

答案:

import math, cmath

def safe_sqrt(x):

try:

num = math.sqrt(x)

except ValueError:

num = cmath.sqrt(x)

return num

if __name__ == "__main__":

x = float(raw_input('please input a number: '))

print safe_sqrt(x)

三亿文库3y.uu456.com包含各类专业文献、中学教育、应用写作文书、专业论文、幼儿教育、小学教育、生活休闲娱乐、17Python核心编程(第二版)第十章习题答案等内容。

猜你喜欢

转载自blog.csdn.net/qq_20113327/article/details/61202779