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