《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语句检测和处理异常. 你也可以添加一个可选的 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核心编程》 第十章 错误和异常的更多相关文章
- 《Python核心编程》部分错误纠正(勘误表)(持续更新)
Chapter 3: 例3-1 makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.linesep #g ...
- Python核心编程读笔 9: 异常
第10章 异常一.异常1 检测和处理异常 (1)try-except语句 try: try_suite #监控这里的异常 except Exception[, reason]: except_suit ...
- Python核心编程这本书的一些错误
<Python核心编程第二版>这本书比<Python基础教程第二版修订版>详细很多,丰富了很多细节,虽然它是一本经典的入门书,但我发现还是存在一些明显的错误.在面向对象编程这一 ...
- 【Python千问 1】Python核心编程(第二版)导读
第一章 欢迎来到Python世界 什么是Python Python的起源 Python的特点 下载Python 安装Python 运行Python Python文档 比较Python(与其它语言的比较 ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
- Python核心编程第二版(中文).pdf 目录整理
python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源 :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...
- python核心编程--笔记(不定时跟新)(转)
的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 1.4 –v ...
- python核心编程笔记(转)
解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 1.4 –v 冗 ...
- Python核心编程(第二版)PDF
Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...
随机推荐
- kmeans理解
最近看到Andrew Ng的一篇论文,文中用到了Kmeans和DL结合的思想,突然发现自己对ML最基本的聚类算法都不清楚,于是着重的看了下Kmeans,并在网上找了程序跑了下. kmeans是unsu ...
- 毕向东JAVA视频讲解笔记(前三课)
1,定义一个类,因为java程序都定义类中,java程序都是以类的形式存在的,类的形式其实就是一个字节码文件最终体现. 2,定义一个主函数.为了让该类可以独立运行. 3,因为演示hello world ...
- 转贴: A Simple c# Wrapper for ffMpeg
原帖地址:http://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for-ffmpeg/ A Simple c# Wrapper fo ...
- 在PowerDesigner中设计物理模型1——表和主外键
原文:在PowerDesigner中设计物理模型1--表和主外键 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念模型,然后由概念模型生成物理模型. 设计好逻辑模型,然后由逻辑模型 ...
- 开源调度框架Quartz最佳实践
开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...
- 解决Cygwin中vim的backspace不能正常使用(转)
转载于:http://blog.chinaunix.net/uid-20614631-id-1914849.html 亲测可用 先把Cygwin下载下来,想在linux下编程的话一定要安装vim,g ...
- [置顶] android 与JavaScript的互相调用
1.html代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> ...
- netty 解决TCP粘包与拆包问题(三)
今天使用netty的固定长度进行解码 固定长度解码的原理就是按照指定消息的长度对消息自动解码. 在netty实现中,只需要采用FiexedLengthFrameDecoder解码器即可... 以下是服 ...
- C#获取ip的示例
界面 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using ...
- float label 提示
很多时候,我们写input 都会添加 placeholder 属性,用于提示用户这里该输入什么,怎么输入,但是当用户一旦输入了字符串,该提示就会消失,相信会有人,输入内容后可能会忘记这里要输入的是什么 ...