码迷,mamicode.com
首页 > 编程语言 > 详细

《Python核心编程》 第十章 错误和异常

时间:2014-08-18 16:14:02      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   io   strong   文件   

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语句检测和处理异常. 你也可以添加一个可选的 else 子句处理没
有探测到异常的时执行的代码. 而 try-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 safe_open(name = None, mode=r):
    try:
        f =open(name,mode)
    except IOError:
        f = None
    else:
        return f
    
if __name__ == "__main__":
    f = safe_open(1.txt)
    print f

运行结果:

 略

  


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

 

  


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(prompt):
    try:
        f = raw_input(prompt)
    except EOFError,KeyboardInterrupt:
        f = None
    return f
        
if __name__ == "__main__":
    f = safe_input(input:)
    print f

 


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

 答:

import math
import cmath

def safe_sqrt(num):
    try:
        ret = math.sqrt(num)
    except ValueError:
        ret = cmath.sqrt(num)
    return ret

if __name__ == "__main__":
    print safe_sqrt(4)
    print safe_sqrt(-4)

 

《Python核心编程》 第十章 错误和异常,布布扣,bubuko.com

《Python核心编程》 第十章 错误和异常

标签:style   blog   color   使用   os   io   strong   文件   

原文地址:http://www.cnblogs.com/wuzhiming/p/3876540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!