Python之异常处理

1、甚么是异常?
异常即是1个事件,该事件会在程序履行进程中产生,影响了程序的正常履行。
1般情况下,在Python没法正常处理程序时就会产生1个异常。
异常是Python对象,表示1个毛病。
当Python脚本产生异常时我们需要捕获处理它,否则程序会终止履行。
2、异常处理
捕捉异常可使用try/except语句。
try/except语句用来检测try语句块中的毛病,从而让except语句捕获异常信息并处理。
如果你不想在异常产生时结束你的程序,只需在try里捕获它。

异常语法:
以下为简单的try….except…else的语法:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部分引发了’name’异常
except <名字>,<数据>:
<语句>        #如果引发了’name’异常,取得附加的数据
else:
<语句>        #如果没有异常产生

try的工作原理是,当开始1个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就能够回到这里,try子句先履行,接下来会产生甚么依赖于履行时是不是出现异常。

try…except的使用方法

try…except用于处理问题语句,捕获可能出现的异常。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常。
演示try…except语句捕获IOError异常
try:
     file("hello.txt", "r")                  #如果文件不存在,引发异常
     print "读文件"
except IOError:                              #捕获IO异常
     print "文件不存在"
except:                                     #其它异常
     print "程序异常" 

python与Java的异常处理模式相似,异常处理语句也能够嵌套,演示以下:
try:
     s = "hello"
     try:
          print s[0] + s[1]
          print s[0] – s[1]
     except TypeError:
          print "字符串不支持减法运算"
except:
     print "异常"
如果外层try子句中的代码引发异常,程序将直接跳转到外层try对应的except子句,而内部的try子句将不会被履行。

try…finally的使用方法
try…except后还可以添加1个finally子句。不管异常是不是产生,finally子句都会被履行。所有的finally子句通经常使用于关闭因异常而不能释放的系统资源。
try:
     f = open("hello.txt", "r")
     try:
          print f.read(5)
     except:
          print "读文件异常"
     finally:
          print "释放资源"
          f.close()
except IOError:
     print "文件不存在"

使用raise抛出异常
当程序出现毛病,python会自动引发异常,也能够通过raise显示地引发异常。1旦履行了raise语句,raise后面的语句将不能履行。
演示raise用法
try:
     s = None
     if s is None:
         print "s 是空对象"
         raise NameError     #如果引发NameError异常,后面的代码将不能履行
     print len(s)
except TypeError:
     print "空对象没有长度"

自定义异常
python允许程序员自定义异常,用于描写python中没有触及的异常情况,自定义异常必须继承Exception类,自定义异常依照命名规范以"Error"结尾,显示地告知程序员这是异常。自定义异常使用raise语句引发,而且只能通过人工方式触发。
from __future__ import division

class DivisionException(Exception):
      def __init__(self, x, y):
            Exception.__init__ (self, x, y)       #调用基类的__init__进行初始化
            self.x = x
            self.y = y

if __name__ == "__main__":
      try:
            x = 3
            y = 2
      if x % y > 0:                               #如果大于0, 则不能被初始化,抛出异常
            print x/y
            raise DivisionException(x, y)
except DivisionException,div:                     #div 表示DivisionException的实例对象
      print "DivisionExcetion: x/y = %.2f" % (div.x/div.y)

assert语句的使用
assert语句用于检测某个条件表达式是不是为真。assert语句又称为断言语句,即assert认为检测的表达式永久为真,if语句中的条件判断都可使用assert语句检测。

附:python标准异常
BaseExceptiona:所有异常的基类
SystemExitb python:解释器要求退出
KeyboardInterruptc:用户中断履行(通常是输入^C)
Exceptiond:常规毛病的基类
StopIteratione:迭代器没有更多的值
GeneratorExita:生成器(generator)产生异常来通知退出
SystemExith:Python 解释器要求退出
StandardErrorg:所有的内建标准异常的基类
ArithmeticErrord:所有数值计算毛病的基类
FloatingPointErrord:浮点计算毛病
OverflowError:数值运算超越最大限制
ZeroDivisionError:除(或取模)零 (所有数据类型)
AssertionErrord:断言语句失败
AttributeError:对象没有这个属性
EOFError:没有内建输入,到达EOF 标记
EnvironmentErrord:操作系统毛病的基类
IOError:输入/输出操作失败
OSErrord:操作系统毛病
WindowsErrorh Windows:系统调用失败
ImportError:导入模块/对象失败
KeyboardInterruptf:用户中断履行(通常是输入^C)
LookupErrord:无效数据查询的基类
IndexError:序列中没有无此索引(index)
KeyError:映照中没有这个键
MemoryError:内存溢出毛病(对Python 解释器不是致命的)
NameError:未声明/初始化对象 (没有属性)
UnboundLocalErrorh:访问未初始化的本地变量
ReferenceErrore:弱援用(Weak reference)试图访问已垃圾回收了的对象
RuntimeError:1般的运行时毛病
NotImplementedErrord:还没有实现的方法
SyntaxError:Python 语法毛病
IndentationErrorg:缩进毛病
TabErrorg:Tab 和空格混用
SystemError 1般的解释器系统毛病
TypeError:对类型无效的操作
ValueError:传入无效的参数
UnicodeErrorh:Unicode 相干的毛病
UnicodeDecodeErrori:Unicode 解码时的毛病
UnicodeEncodeErrori:Unicode 编码时毛病
UnicodeTranslateErrorf:Unicode 转换时毛病
Warningj:正告的基类
DeprecationWarningj:关于被弃用的特点的正告
FutureWarningi:关于构造将来语义会有改变的正告
OverflowWarningk:旧的关于自动提升为长整型(long)的正告
PendingDeprecationWarningi:关于特性将会被废弃的正告
RuntimeWarningj:可疑的运行时行动(runtime behavior)的正告
SyntaxWarningj:可疑的语法的正告
UserWarningj:用户代码生成的正告

Python的Exception层次结构

Exception
|
+– SystemExit
+– StopIteration
+– StandardError
| |
| +– KeyboardInterrupt
| +– ImportError
| +– EnvironmentError
| | |
| | +– IOError
| | +– OSError
| | |
| | +– WindowsError
| | +– VMSError
| |
| +– EOFError
| +– RuntimeError
| | |
| | +– NotImplementedError
| |
| +– NameError
| | |
| | +– UnboundLocalError
| |
| +– AttributeError
| +– SyntaxError
| | |
| | +– IndentationError
| | |
| | +– TabError
| |
| +– TypeError
| +– AssertionError
| +– LookupError
| | |
| | +– IndexError
| | +– KeyError
| |
| +– ArithmeticError
| | |
| | +– OverflowError
| | +– ZeroDivisionError
| | +– FloatingPointError
| |
| +– ValueError
| | |
| | +– UnicodeError
| | |
| | +– UnicodeEncodeError
| | +– UnicodeDecodeError
| | +– UnicodeTranslateError
| |
| +– ReferenceError
| +– SystemError
| +– MemoryError
|
+—Warning
|
+– UserWarning
+– DeprecationWarning
+– PendingDeprecationWarning
+– SyntaxWarning
+– OverflowWarning
+– RuntimeWarning
+– FutureWarning

参考文献:
http://blog.chinaunix.net/uid⑵1505614-id⑶618285.html
http://www.phperz.com/article/14/1009/14507.html
http://blog.chinaunix.net/uid⑵2920230-id⑶074716.html

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Python之异常处理

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡