异常

內建异常在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. Django在form提交CSRF验证失败. 相应中断问题

    CSRF验证失败. 相应中断. 1).首先,我们可以先看一下出现问题的所在的原因. Your browser is accepting cookies. The view function passe ...

  2. AWS EC2 通过Linux终端:使用ssh连接到Linux实例

    AWS的ubuntu主机登录用户是ubuntu 只能通过秘钥的方式登录 如果在linux终端通过ssh远程登录步骤如下: 假如申请EC2主机的时候下载的key名称叫my-key.pem,并保存在本地l ...

  3. java基础之继承(二)

    上篇我们介绍了java中的构造方法,了解了关键字this和super在继承中所起到的作用,this可以显式调用重载的构造方法,super可以显式的调用父类中的任意可见方法.了解方法重载和重写的区别,知 ...

  4. 64位Kali无法顺利执行pwn1问题的解决方案

    问题描述 ​ 环境:VMware Fusion + kali-linux-2018.1-amd64.iso ​ 问题:在Terminal利用./pwn1执行pwn1会出现 bash: ./pwn1:没 ...

  5. java容器类分析:Collection,List,ArrayList

    1. Iterable 与 Iterator Iterable 是个接口,实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符 ...

  6. 关于 frame的一些基本知识

    关于 frame的一些基本知识只是摘抄了一部分,供初学者参考. b.帧速率: 帧速率是每秒显示的图像数.标准影片(NTSC) 是29.97 帧第秒 (fps),电影是每秒24 帧fps.欧洲标准是(P ...

  7. 各大HotFix热补丁方案分析和比较

    最近开源界涌现了很多热补丁项目,但从方案上来说,主要包括Dexposed.AndFix.ClassLoader(来源是原QZone,现淘宝的工程师陈钟,在15年年初就已经开始实现)三种.前两个都是阿里 ...

  8. windows 下安装或者卸载memcache

    1.安装到系统服务中: 在doc中:执行此软件 memcached.exe -d install(如果提示错误,要找到cmd.exe用管理员身份打开) 2.卸载: 在doc中:执行此软件 memcac ...

  9. Java Web项目(Extjs)报错一

    1.Java Web(Extjs)项目报错一 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -no ...

  10. Java之Iterator

    Java之Iterator 1.实例源码 /** * @Title:IteratorJava.java * @Package:com.you.model * @Description:Iterator ...