Python基础编程(八)异常

来源:互联网 发布:linux打包文件 编辑:程序博客网 时间:2024/06/04 19:45

8.1 什么是异常

Python用异常对象来表示异常情况。
事实上,每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,使得程序可以抓住错误并且对其进行处理,而不是让整个程序失败。
BaseException                 所有异常基类 +-- SystemExit                python解释器请求退出 +-- KeyboardInterrupt            用户中断执行(通常是输入ctrl+C) +-- GeneratorExit              生成器(generator)发生异常来通知退出  +-- Exception                常规错误的基类      +-- StopIteration           迭代器没有更多的值      +-- StandardError           所有的内建标准异常的基类      |    +-- BufferError               |    +-- ArithmeticError       所有数值计算错误的基类      |    |    +-- FloatingPointError   浮点计算错误      |    |    +-- OverflowError     数值运算超出最大限制      |    |    +-- ZeroDivisionError   除(或取模)零(所有数据类型)      |    +-- AssertionError               断言语句失败      |    +-- AttributeError        对象没有这个属性      |    +-- EnvironmentError      操作系统错误的基类      |    |    +-- IOError          输入输出失败      |    |    +-- OSError          操作系统错误       |    |         +-- WindowsError (Windows)      windows系统调用失败      |    |         +-- VMSError (VMS)               |    +-- EOFError          没有内建输入,到达EOF标记                |    +-- ImportError        导入模块/对象 失败      |    +-- LookupError        无效数据查询的基类      |    |    +-- IndexError      序列中没有此索引(index)      |    |    +-- KeyError       映射中没有这个键      |    +-- MemoryError        内存溢出错误(对于Python解释器不是致命的)      |    +-- NameError         未声明/初始化对象(没有属性)      |    |    +-- UnboundLocalError  访问未初始化的本地变量      |    +-- ReferenceError       弱引用(Weak reference)试图访问已经垃圾回收了的对象      |    +-- RuntimeError        一般的运行时错误      |    |    +-- NotImplementedError 尚未实现的方法      |    +-- SyntaxError         Pythony语法错误      |    |    +-- IndentationError   缩进错误      |    |         +-- TabError     Tab和空格混用      |    +-- SystemError         一般的解释器系统错误      |    +-- TypeError                  对类型无效的操作      |    +-- ValueError         传入无效的参数      |         +-- UnicodeError              Unicode相关错误      |              +-- UnicodeDecodeError    Unicode解码时错误      |              +-- UnicodeEncodeError    Unicode编码时错误      |              +-- UnicodeTranslateError   Unicode转换时错误      +-- Warning               警告的基类                  +-- DeprecationWarning      关于被启用的特征的警告           +-- PendingDeprecationWarning  关于构造将来语义会有改变的警告           +-- RuntimeWarning         可疑的运行时行为的警告         +-- SyntaxWarning               可疑的语言的警告             +-- UserWarning        用户代码生成警告           +-- FutureWarning   +-- ImportWarning              导入模块/对象警告   +-- UnicodeWarning              Unicode警告   +-- BytesWarning               Bytes警告       +-- Overflow Warning      旧的关于自动提升为长整型(long)的警告

8.2.2 自定义异常类

创建自己的异常类——就像其他类一样,只是要确保从Exception类继承(不管是间接的或者是直接的,也就是说继承其他的内建异常类也是可以的)。
class SomeCustonException(Exception): pass

8.3 捕捉异常

为了捕捉异常并且做出一些错误处理里,可以这样重写程序:
try:   x = input('Enter the first number: ')   y = input('Enter the second number: ')   print x/yexcept ZeroDivisionError:         print "The second number can't be zero!"
屏蔽机制。

8.4 不止一个except子句

try:   x = input('Enter the first number: ')   y = input('Enter the second number: ')   print x/yexcept ZeroDivisionError:         print "The second number can't be zero!"except TypeError:         print "That wasn't a number,was it?"

8.5 用一个块捕捉两个异常

try:   x = input('Enter the first number: ')   y = input('Enter the second number: ')   print x/yexcept (ZeroDivisionError,TypeEror,NameError):         print "your number were bogus..."

8.6 捕捉对象

try:   x = input('Enter the first number: ')   y = input('Enter the second number: ')   print x/yexcept (ZeroDivisionError,TypeEror),e:         print e

8.7 真正的捕捉

如果真的想用一段代码捕捉所有的异常,那么可以在except子句中忽略所有的异常类:
try:   x = input('Enter the first number: ')   y = input('Enter the second number: ')   print x/yexcept:         print "Something wrong happend..."

8.8 else

try:   print 'A simple task'except:         print 'What? Something went wrong?'else:     print 'Ah... It went as planned.'
只有在没有异常引发的情况下,else才会执行。

8.9 finally

x = Nonetry:   x = 1/0finally:       print 'Cleaning up...'       del x
finally子句肯定会被执行,不管try子句中是否发生异常。

































0 0
原创粉丝点击