python笔记之异常
异常
內建异常在exceptions模块内,使用dir函数列出模块的内容。
自定义异常类:继承基类Exception。
异常可以使用raise语句引发,可以使用try ... except ... else ... finally 捕获和处理。
內建异常
>>> import exceptions
>>> dir(exceptions)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__doc__', '__name__', '__package__']
- Exception 所有异常的基类
- AttributeError 特性引用或赋值失败时引发
- IOError 试图打开不存在的文件(包括其他情况)时引发
- IndexError 使用序列中不存在的索引时引发
- KeyError 使用映射中不存在的键时引发
- NameError 找不到名字(变量)时引发
- SyntaxError 代码错误时引发
- TypeError 內建操作或者函数应用于错误类型的对象时引发
- ValueError 对象使用不合适的值时引发
- ZeroDivisionError 除法或模除操作,第二个参数为0时引发
自定义异常
>>> class MyException(Exception): #没有任何自定义的方法
... pass
...
>>> me = MyException()
>>> dir(me)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', 'args', 'message']
>>>
>>> me.message
''
>>> me = MyException("my exception") #初始化时给message赋值
>>> me.message
'my exception'
>>>
>>>> raise MyException #引发异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyException
>>> raise MyException("my exception msg") #引发异常,附带msg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyException: my exception msg
捕获与处理异常
# -*- coding: UTF-8 -*-
#!/usr/bin/python
#运行python脚本,指定bin文件
def processExceptions(x, y):
try:
x/y
except ZeroDivisionError, e: #处理一种异常,打印错误信息
print e
except TypeError, e: #处理另一种异常
print e
raise
except Excetion, e: #重新引发捕获的异常
print e
raise
else: #如果没有异常,执行这里
print "everything goes well ..."
finally: #最终执行,不论有没有异常发生
print "the end ..."
def processMultiException(x, y):
try:
print x/y
except (ZeroDivisionError, TypeError, NameError), e: #处理多种异常,打印错误信息
print e
except Excetion, e: #重新引发捕获的异常
print e
raise
processExceptions(1,1) #正常执行
print '\n'
processExceptions(1,0) #除数为0 引发异常
print '\n'
processMultiException(1,0) #除数为0 引发异常
print '\n'
#类型不对,引发异常
processExceptions(1,"aa")
#因为异常抛出到主程序,下面的不执行
print "exception end ..."
- 程序中有中文注释,如果没有添加第一行,会报错:
File "exception.py", line 8
SyntaxError: Non-ASCII character '\xe5' in file exception.py on line 8, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
- 运行结果如下:
AT8775:python shoren$ python exception.py
#processExceptions(1,1) #正常执行
everything goes well ...
the end ...
#processExceptions(1,0) #除数为0 引发异常
integer division or modulo by zero
the end ...
#processMultiException(1,0) #除数为0 引发异常
integer division or modulo by zero
#processExceptions(1,"aa")
unsupported operand type(s) for /: 'int' and 'str'
the end ...
Traceback (most recent call last):
File "exception.py", line 39, in <module>
processExceptions(1,"aa")
File "exception.py", line 7, in processExceptions
x/y
TypeError: unsupported operand type(s) for /: 'int' and 'str'
python笔记之异常的更多相关文章
- python学习笔记5_异常
python学习笔记5_异常 1.什么事异常 Python使用异常对象(exception object) 来表示异常情况.遇到错误会发生异常. 如果异常对象未被处理或被捕捉,程序就会用所谓的回溯(t ...
- Python错误和异常 学习笔记
错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python笔记 - day7
python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...
- s21day21 python笔记
s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...
- Python笔记(五):异常处理和数据存储
注:和上一篇有关联 (一) finally 和 输出异常信息 try: the_man = open(r'C:\Users\123456\Desktop\test.txt') ...
- python 笔记-转
python笔记 Python 学习笔记 - 14.技巧(Tips) Python 学习笔记 - 13.异常(Exception) Python 学习笔记 - 12.流程控制(Contro ...
- python笔记24-unittest单元测试之mock.patch
前言 上一篇python笔记23-unittest单元测试之mock对mock已经有初步的认识, 本篇继续介绍mock里面另一种实现方式,patch装饰器的使用,patch() 作为函数装饰器,为您创 ...
随机推荐
- HZAU 1199: Little Red Riding Hood 01背包
题目链接:1199: Little Red Riding Hood 思路:dp(i)表示前i朵花能取得的最大价值,每一朵花有两种选择,摘与不摘,摘了第i朵花后第i-k到i+k的花全部枯萎,那么摘的话d ...
- CEPH s3 java sdk PUT对象并在同一个PUT请求中同时设置ACL为 Public
java: http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/acl-using-java-sdk.html tring bucketName ...
- Cramfs、JFFS2、YAFFS2全面对比
由 于嵌入式系统自身存在一些特殊要求使得一些传 统的文件系统 (如FAT.EXT2等) 并不十分适合.专 用的嵌入式文件系统应有一些自身的特性如文件系统 面对的储存介质特殊性.文件系统应具有的跨 ...
- sudo:无法解析主机 解决方案
你如果电脑中没有vim,用gedit也可以. 打开文件以后,将其中的 127.0.1.1 xxxxx xxx 替换成你电脑的自己的名字即可.
- Java Web项目(Extjs)报错八
1.Java Web项目(Extjs)报错八 具体报错如下: org.springframework.dao.DataIntegrityViolationException: Could not ex ...
- Java中的大小写字母相互转换(不利用Java自带的方法)
Java中的大小写字母相互转换(不利用Java自带的方法) 1.设计源码 /** * * @title:UpperAndLower.java * @Package:com.you.utils * @D ...
- Hibernate中的条件查询完成类
Hibernate中的条件查询有以下三个类完成: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类
- SCADA系统
简介编辑 在电力系统中,SCADA系统应用最为广泛,技术发展也最为成熟.它在远动系统中占重要地位,可以对现场 SCADA系统 的运行设备进行监视和控制,以实现数据采集.设备控制.测量.参数调节以及各类 ...
- unix时间戳转换成标准时间(c#)
//---unix时间戳转换成标准时间(c#)---// /* string timeStamp = "1144821796"; DateTime dtSt ...
- 将泛类型集合List类转换成DataTable
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...