异常

內建异常在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. 针对Student表的DAO设计实例

    完整代码以及junit,mysql--connector包下载地址 : https://github.com/CasterWx/MyStudentDao 表信息: 代码: dao包----impl包- ...

  2. HDU5992 - Finding Hotels

    原题链接 Description 给出个二维平面上的点,每个点有权值.次询问,求所有权值小于等于的点中,距离坐标的欧几里得距离最小的点.如果有多个满足条件的点,输出最靠前的一个. Solution 拿 ...

  3. 【SSH框架】系列之 Spring 整合 Hibernate 框架

    1.SSH 三大框架整合原理 Spring 与 Struts2 的整合就是将 Action 对象交给 Spring 容器来负责创建. Spring 与 Hibernate 的整合就是将 Session ...

  4. 【视频教程】一步步将AppBox升级到Pro版

    本系列教程分为上中下三部分,通过视频的形式讲解如何将基于FineUI(开源版)的AppBox v6.0一步一步升级FineUIPro(基础版). [视频教程]一步步将AppBox升级到Pro版(上)主 ...

  5. Linux分区和挂载(mount命令的学习)

    当Windows系统出现问题的时候,可能需要重装系统,这个时候我们往往会使用系统盘将系统重新安装在C盘上,其他盘上的文件都没有受到重装系统的影 响,这就是分区的好处之一.同样,在Linux中也需要分区 ...

  6. Ubuntu的shell之bash和dash

    Ubuntu的 shell 默认安装的是 dash,而不是 bash. 运行以下命令查看 sh 的详细信息,确认 shell 对应的程序是哪个: $ls -al /bin/sh dash 比 bash ...

  7. 利用Java API生成50到100之间的随机数

    利用Java API生成50到100之间的随机数 /** * */ package com.you.demo; import java.util.Random; /** * @author Admin ...

  8. SecurityError:Error #2048:安全沙箱冲突

    1.错误描述 SecurityError:Error #2048:安全沙箱冲突:http://localhost:8080/YHD/flash/YHD.swf 不能从 http://123.89.45 ...

  9. Flex实现双轴条状图

    1.问题背景 一般的,柱状图可以实现双轴图,但是如何实现双轴条状图? 2.实现实例 <?xml version="1.0" encoding="utf-8" ...

  10. 移动端web开发安卓和ios客户端在时间转换上的差异性问题

    作为一名移动前端开发的人员,平时遇到的兼容性问题不在少数.那么,今天就来说一下最近遇到的一个小坑(关于Android和ios在时间转换上的差异性问题)话不多说,直接上重点. 最近接到了一个需求,很简单 ...