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

    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)

    说明:内容为网络爬虫练习所得,如侵权,请联系删除

  • 相关阅读:
    Esper学习之六:EPL语法(二)
    从排序开始(五) 堆排序
    hdu 4750 Count The Pairs (2013南京网络赛)
    并查集+二分-hdu-4750-Count The Pairs
    VS2010+ICE3.5运行官方demo报错----std::bad_alloc
    ServiceStack.Redis.IRedisHash.cs
    ServiceStack.Data.IEntityStore.cs
    ServiceStack.Caching.ICacheClientExtended.cs
    ServiceStack.Caching.ICachClient.cs
    ServiceStack.Caching.IRemoveByPattern.cs
  • 原文地址:https://www.cnblogs.com/alphabetical/p/14379167.html
Copyright © 2020-2023  润新知