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核心编程》 第十章 错误和异常的更多相关文章

  1. 《Python核心编程》部分错误纠正(勘误表)(持续更新)

    Chapter 3: 例3-1 makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.linesep #g ...

  2. Python核心编程读笔 9: 异常

    第10章 异常一.异常1 检测和处理异常 (1)try-except语句 try: try_suite #监控这里的异常 except Exception[, reason]: except_suit ...

  3. Python核心编程这本书的一些错误

    <Python核心编程第二版>这本书比<Python基础教程第二版修订版>详细很多,丰富了很多细节,虽然它是一本经典的入门书,但我发现还是存在一些明显的错误.在面向对象编程这一 ...

  4. 【Python千问 1】Python核心编程(第二版)导读

    第一章 欢迎来到Python世界 什么是Python Python的起源 Python的特点 下载Python 安装Python 运行Python Python文档 比较Python(与其它语言的比较 ...

  5. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  6. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  7. Python核心编程第二版(中文).pdf 目录整理

    python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源  :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...

  8. python核心编程--笔记(不定时跟新)(转)

    的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   ...

  9. python核心编程笔记(转)

    解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗 ...

  10. Python核心编程(第二版)PDF

    Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...

随机推荐

  1. [SQL Server 系] -- 模糊查询

    SQL Server中的通配符有下面四种 通配符 说明 % 包含零个或多个字符的任意字符串 _(下划线) 任意单个字符 [ ] 任意在指定范围或集合中的单个字符 [^ ] 任意不在指定范围或集合中的单 ...

  2. 解决virtualbox 虚拟机不能ping通win7

    凭经验猜测是由于防火墙引起的,关闭防火墙再ping,果然可行.google说这是由于“win7 防火墙默认的禁ping策略”引起的.但是关闭防火墙很不安全,可以按照以下步骤为防火墙添加入站规则来解决问 ...

  3. mac下安装mysql 连接时候报错 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    http://segmentfault.com/q/1010000000094608 同样的问题,先在网上搜了下其他人解决这个问题的方法,是去修改mysql.cnf文件添加mysql.sock文件路径 ...

  4. [wikioi]线段树练习 2

    http://codevs.cn/problem/1081/ #include <vector> #include <iostream> #include <string ...

  5. 【Linux高频命令专题(17)】head

    概述 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 命令格式 hea ...

  6. HTML5入门7---"session的会话缓存"和"localStorage的cookie"缓存数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Rebound-Android的弹簧动画库

    Rebound是facebook出品的一个弹簧动画库,与之对应的IOS版本有一个pop动画库,也是非常的强大给力.Facebook真是互联网企业中的楷模,开源了很多的实用开源库,大赞一个!!! 讲解R ...

  8. JAVA+ Proxool+ SQLserver 2008 “signer information does not match signer information of other classes in the same package”

    1. Proxool+SQLserver2008(sqljdbc4.jar)集成问题最近在项目中遇到个问题:我用的是Proxool连接池,连接SQLserver2008数据库,控制台报错:签名信息和同 ...

  9. Android学习之-TextView的滑动效果

    textView中如何设置滚动条 在xml中定义: <TextView            android:layout_width="wrap_content"      ...

  10. 前端自动化神器gulp使用记录

    1.安装压缩图片插件的时候,由于网络原因,死活安装不成功.由于imagemin本身就包含很多插件,安装的时候卡住了,很是郁闷.如果要压缩png图片,那就单独安装imagemin-pngquant压缩插 ...