《Python基础教程(第二版)》学习笔记 -> 第八章 异常
什么是异常
Python用 异常对象(exception object)来表示异常情况。遇到错误后,会引发异常,如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行:
>>> 1/0
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
1/0
ZeroDivisionError: integer division or modulo by zero
每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,是的程序可以捕捉错误并且对其进行处理,而不是让整个程序失败。
按自己的方式出错
- raise 语句
为了引发异常,可以使用一个类(应该是Exception的子类)或者实例参数调用raise语句。使用类时,程序会自动创建实例,下面是一些例子:>>> raise Exception Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> raise Exception Exception下面是一些最重要的内建异常类:
类名
描述
Exception 所有异常的基类 AttributeError 特性引用或者赋值失败时引发 IOError 试图打开不存在的文件(包括其他情况)时引发 IndexError 在使用序列中不存在的索引时引发 KeyError 在使用映射中不存在的键时引发 NameError 在找不到名字(变量)时引发 SyntaxError 在代码为错误形式时引发 TypeError 在内建操作或者函数应用于错误类型的对象时引发 ValueError 在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发 ZeroDivisionError 在除法或者模除操作的第二个参数为0的时候引发 - 自定义异常类
确保从Exception类继承:>>> class SomeCustomException(Exception):pass
- 捕捉异常
先举例:try: x = input('Enter the first number:') y = input('Enter the second number:') print x/y except ZeroDivisionError: print "The second number can't be zero!"运行结果:
>>> Enter the first number:3 Enter the second number:0 The second number can't be zero!
- 不止一个except子句
try: x = input('Enter the first number:') y = input('Enter the second number:') print x/y except ZeroDivisionError: print "The second number can't be zero!" except TypeError: print "That wasn't a number , was it?"运行结果:
Enter the first number:2 Enter the second number:"python" That wasn't a number , was it?
只要在try/except后面追加一个except语句
- 用一个块捕捉两个异常
try: x = input('Enter the first number:') y = input('Enter the second number:') print x/y except (ZeroDivisionError,TypeError,NameError): print "Your number were bogus..." - 捕捉对象
先举例运行:try: x = input("Enter the first number:") y = input("Enter the second number:") print x/y except(ZeroDivisionError,TypeError),e: print e运行结果:
Enter the first number:3 Enter the second number:0 integer division or modulo by zero
如果希望在except子句中访问异常对象本身,可以使用两个参数。比如,如果想让程序继续运行,但是又因为某种原因想记录下错误,这个功能就很实用。
- 万事大吉
对try/except加入else语句
示例:while True: try: x = input("Enter the First number: ") y = input("Enter the Second number: ") value = x/y print "x/y is ", value except Exception,e: print 'Invalid input:',e print 'PLS try again!' else: break运行结果:
Enter the First number: w Invalid input: name 'w' is not defined PLS try again! Enter the First number: 1 Enter the Second number: 0 Invalid input: integer division or modulo by zero PLS try again! Enter the First number: 5 Enter the Second number: 4 x/y is 1
异常和函数
异常和函数能很自然地一起工作,如果异常在函数内引发而不被处理,它就会传播至函数调用的地方。如果在哪里也没有处理异常,它就会继续传播,一直到达主程序(全局作用域)。如果哪里没有异常处理程序,程序会带着堆栈跟踪中止。
《Python基础教程(第二版)》学习笔记 -> 第八章 异常的更多相关文章
- Jquery基础教程第二版学习记录
本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做 ...
- <<Python基础教程>>学习笔记 | 第10章 | 充电时刻
第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...
- <<Python基础教程>>学习笔记 | 第04章 | 字典
第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...
- <<Python基础教程>>学习笔记 | 第12章 | 图形用户界面
Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...
- 第二章、元组和列表(python基础教程第二版 )
最基本的数据结构是序列,序列中每个元素被分配一个序号-元素的位置,也称索引.第一个索引为0,最后一个元素索引为-1. python中包含6种内建的序列:元组.列表.字符串.unicode字符串.buf ...
- python基础教程第二版 第一章
1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
随机推荐
- oracle触发器详解(转)
触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里以独立的对象存储,它与存储过 ...
- 李洪强iOS学习交流群-iOS大神群
iOS学习大神群-群号:483959373
- lintcode:next permutation下一个排列
题目 下一个排列 给定一个整数数组来表示排列,找出其之后的一个排列. 样例 给出排列[1,3,2,3],其下一个排列是[1,3,3,2] 给出排列[4,3,2,1],其下一个排列是[1,2,3,4] ...
- 欧拉工程第68题:Magic 5-gon ring
题目链接 任意一条线上的三个数的和都等于9,顺时针,从最小的外圈开始,得到的序列是:432621213 和 序列 9位的字符串:三角环所能形成的最大字符串为432621513. ...
- iOS开发--SWRevealViewController
SWRevealViewController 是一个比较好的实现Sliding功能的第三方类. 今天跟大家分享一下如何使用SWRevealViewController实现左右菜单滑动功能. 首先,在工 ...
- SQL查询(笔记2——实体查询)
SQL查询(笔记2——实体查询) 二.实体查询 如果查询返回了某个数据表的全部数据列,且该数据表有对应的持久化类映射,我们就把查询结果转换成实体查询.将查询结果转换成实体,可以使用SQLQuery提供 ...
- 87. Scramble String
题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...
- 2014图灵技术图书最受欢迎TOP15
来自:图灵社区昨晚给我发的邮件,感觉不错,和大家分享,mark下. [小编语] 回首2014,感谢小伙伴们一路相随.让我们2015一起更快乐地玩耍.今天小编为大家盘点一下过去2014年表现最给力的技术 ...
- Java中ArrayList和LinkedList区别
ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...
- C++ 11 vlearning
1.新增算术类型 longlong,最小不比long小,一般为64位. 2.列表初始化 int units_sold = {0};或者 int units_sold{0};非11标准 ...