10.14 练习

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

a)用户;

b)解释器;

c)程序;

d)以上所有;

e)只有b)和c);

f)只有a)和c)。

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

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

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

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

10.14 练习 - 图1

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

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

10.14 练习 - 图2

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

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

[1].从Python1.5开始,所有的标准异常都使用类来实现。如果你对类、实例和其他面向对象相关术语不太了解,请参阅第13章。