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

    xiaoxiao2021-03-25  99

    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核心编程(第二版)第十章习题答案等内容。

    转载请注明原文地址: https://ju.6miu.com/read-23626.html

    最新回复(0)