Python核心编程第二版第十章:错误和异常(课后习题)----我的答案

10-1.引发异常。以下哪个因素会在程序执行时引发异常?

a.用户 b.解释器 c.程序 d.以上所有 e.只有b和c f.只有a和c

答案是f

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

用户输入和程序异常

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

raise。

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

try语句至少要有一个except语句,而finally语句是可选的。

try-except语句定义了进行异常监控的一段代码,并且提供了处理异常的机制,如果try语句中出现异常,则try之后的语句都不再运行,转入except语句捕捉异常。

而try-finally语句,不管是否出现异常,finally中的语句总会运行,它常常用来维持一致的行为而无论异常是否发生。

10-5.异常。下面这些交互解释器下的Python代码段分别会引发什么异常

a.SyntaxError:Python解释器语法错误,表示Python代码中有一个不正确的结构。

>>> if 3 < 4 then:print '3 IS less than 4!'
  File "<stdin>", line 1
    if 3 < 4 then:print '3 IS less than 4!'
                ^
SyntaxError: invalid syntax
b.IndexError:请求的索引超出序列范围
>>> aList = ['Hello', 'World', 'Anyone', 'Home?']
>>> print 'the last string in aList is: ', aList[len(aList)]
the last string in aList is:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

c.NameError:尝试访问一个未申明的变量

>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
d.ZeroDivisionError:除数为0
>> x = 4 % 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

e.ValueError:值错误,-1不能开平方

>>> i = math.sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

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

def safe_open():
    try:
        f = open('xxx.txt')
        f.close()
    except Exception:
        return None

print(safe_open())

10-7.异常。下面两段Python伪代码a和b有什么区别?考虑语句A和B的上下文环境。

(a) try:

statement_A

except . . .:

. . .

else:

statement_B

(b) try:

statement_A

statement_B

except . . .:

. . .

若statement_A语句发生错误,则a和b中的B语句都不能运行;若B语句发生错误,则b中的except语句能捕获这个错误,不会终止程序,而a语句则被终止程序运行,同时显示错误信息。

10-8.改进的raw_input()。

def safe_raw_input():
    try:
        prompt = 'Input whatever: '
        raw_input(prompt)
    except EOFError, KeyboardInterrupt:
        return None

print(safe_raw_input())

10-9.改进的math.sqrt()。

import math, cmath
def safe_math_sqrt(num):
    try:
        p = math.sqrt(num)
        return p
    except ValueError:
        p = cmath.sqrt(num)
        return p

if __name__ == '__main__':
    num = int(raw_input('Input a number: '))
    print(safe_math_sqrt(num))





猜你喜欢

转载自blog.csdn.net/qq_41805514/article/details/80488804