异常

內建异常在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笔记之异常的更多相关文章

  1. python学习笔记5_异常

    python学习笔记5_异常 1.什么事异常 Python使用异常对象(exception object) 来表示异常情况.遇到错误会发生异常. 如果异常对象未被处理或被捕捉,程序就会用所谓的回溯(t ...

  2. Python错误和异常 学习笔记

    错误和异常概念 错误:     1.语法错误:代码不符合解释器或者编译器语法     2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行     1.程序遇到 ...

  3. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  4. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  5. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

  6. s21day21 python笔记

    s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...

  7. Python笔记(五):异常处理和数据存储

    注:和上一篇有关联 (一)  finally 和 输出异常信息 try:       the_man = open(r'C:\Users\123456\Desktop\test.txt')       ...

  8. python 笔记-转

    python笔记   Python 学习笔记 - 14.技巧(Tips)   Python 学习笔记 - 13.异常(Exception)   Python 学习笔记 - 12.流程控制(Contro ...

  9. python笔记24-unittest单元测试之mock.patch

    前言 上一篇python笔记23-unittest单元测试之mock对mock已经有初步的认识, 本篇继续介绍mock里面另一种实现方式,patch装饰器的使用,patch() 作为函数装饰器,为您创 ...

随机推荐

  1. Android预定义样式

    字体大小 对于能够显示文字的控件(如TextView EditText RadioButton Button CheckBox Chronometer等等),你有时需要控制字体的大小.Android平 ...

  2. Spring Boot 2.0(二):Spring Boot 2.0尝鲜-动态 Banner

    Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜. 配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发 ...

  3. UVA-11882 bfs + dfs + 剪枝

    假设当前已经到达(x,y),用bfs判断一下还可以到达的点有maxd个,如果maxd加上当前已经经过的长度小于当前答案的长度就退出,如果相同,就将bfs搜索到的点从大到小排序,如果连最大序列都无法大于 ...

  4. Object方法

    1. getClass() 返回此 Object 的运行时类. 2. hashCode() 返回该对象的哈希码值. 3. equals() 指示其他某个对象是否与此对象“相等”. 4. toStrin ...

  5. nodejs之socket.io模块——实现了websocket协议

    Nodejs实现websocket的4种方式:socket.io.WebSocket-Node.faye-websocket-node.node-websocket-server,主要使用的是sock ...

  6. CDN中前端层的复制

    前端层的复制是为了提高静态内容分发的性能和可扩展性.将静态内容的分发转由边缘服务器来完成是为了解决可扩展性的问题,因为这样做可以避免出现在对等点和广域网链路处的网络拥堵风险,而这两个地方的拥堵是网络延 ...

  7. MS SQL xp_instance_regwrite设置注册表疑惑

      以前写过一篇博文"MS SQL 日志记录管理",里面介绍了如何设置SQL Server的错误日志的最大归档数量,如果在SSMS的UI界面设置,可以从"Manageme ...

  8. IIS部署web,字体404的问题

    今天在部署测试环境的时候,遇到字体无法访问的情况,如下图 其实,字体是存在的.路径也没有错.因为点超链接是可以看到的. 所以,怀疑是服务器不识别该字体.经过网上查找.找到了配置IIS的方法.让服务器可 ...

  9. 【php】PHP环境整合

    很久没装环境, 今天重新装了一次.遇到不少问题.记录下方便以后查看 修改apache的配置文件httpd.conf #apache 解析phpLoadFile "C:/phpeve/php5 ...

  10. NetBeans运行项目报错

    1.错误描述 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start co ...