Python-异常

来源:互联网 发布:编程教程网站 编辑:程序博客网 时间:2024/05/18 01:45

1. 什么是异常

即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
  

2. 异常的常用形式

try:

    正常的操作

  ......................

except:

    发生异常,执行这块代码

  ......................

else:

    如果没有异常执行这块代码

finally:

    不管如何,最后一定要执行的代码

捕捉异常可以使用try/except语句

try/except 语句用来检测try语句中的错误,从而让except 语句捕获异常信息并处理

如果不想在异常发生时结束你的程序,只需在try 里捕获它

基本工作流程:

1.如果 try  后的语句执行正确,跳到else ,执行else 这块代码,并执行finally 后的语句

2.如果try 后的语句执行异常,跳到except ,执行except这块代码,捕捉异常,并执行finally后的语句

没有捕获到异常,直接走else,最后还是需要走finally,不管有没有捕获异常finally是最后都需要执行的。

例如:

try:    10/2except Exception as e:    print e    print ('error')else:    print ('ok')finally:    print"finally"
结果:

okfinally

说明: 没有发生异常,所以,直接走到else语句,并执行finally 语句

try:    10/0except Exception as e:    print e    print ('error')else:    print ('ok')finally:    print"finally"
结果:

integer division or modulo by zeroerrorfinally
说明:

try  后语句出错,走except 后的语句,捕捉到异常,输出后面的语句,最后执行finally 语句。

不管有没有捕获异常finally是最后都需要执行的。

处理多个异常信息:

try:    正常的操作   ......................except(Exception1[, Exception2[,...ExceptionN]]]):   发生以上多个异常中的一个,执行这块代码   ......................else:    如果没有异常执行这块代码
异常的参数:

一个异常可以带上参数,可作为输出的异常信息参数

可以通过except 语句来捕获异常的参数,如下:

try:    正常的操作   ......................except ExceptionType, Argument:    你可以在这输出 Argument 的值...
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。

元组通常包含错误字符串,错误数字,错误位置。

def temp(var):    try:        return int (var)    except ValueError,Argument:        print"no num\n",Argument    finally:        print "finally" temp('123')


2. 异常处理的方法

异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit生成器(generator)发生异常来通知退出StandardError所有的内建标准异常的基类ArithmeticError所有数值计算错误的基类FloatingPointError浮点计算错误OverflowError数值运算超出最大限制ZeroDivisionError除(或取模)零 (所有数据类型)AssertionError断言语句失败AttributeError对象没有这个属性EOFError没有内建输入,到达EOF 标记EnvironmentError操作系统错误的基类IOError输入/输出操作失败OSError操作系统错误WindowsError系统调用失败ImportError导入模块/对象失败LookupError无效数据查询的基类IndexError序列中没有此索引(index)KeyError映射中没有这个键MemoryError内存溢出错误(对于Python 解释器不是致命的)NameError未声明/初始化对象 (没有属性)UnboundLocalError访问未初始化的本地变量ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象RuntimeError一般的运行时错误NotImplementedError尚未实现的方法SyntaxErrorPython 语法错误IndentationError缩进错误TabErrorTab 和空格混用SystemError一般的解释器系统错误TypeError对类型无效的操作ValueError传入无效的参数UnicodeErrorUnicode 相关的错误UnicodeDecodeErrorUnicode 解码时的错误UnicodeEncodeErrorUnicode 编码时错误UnicodeTranslateErrorUnicode 转换时错误Warning警告的基类DeprecationWarning关于被弃用的特征的警告FutureWarning关于构造将来语义会有改变的警告OverflowWarning旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning关于特性将会被废弃的警告RuntimeWarning可疑的运行时行为(runtime behavior)的警告SyntaxWarning可疑的语法的警告UserWarning用户代码生成的警告

3.触发异常

raise 关键字

raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
def func(level):    if level<1:        raise Exception ('invail level',level)try:    func(0)except:    print 1else:    print 2

1
用户自定义异常:

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式

class networkerror(RuntimeError):    def __init__(self,arg):        self.args=argtry:    raise networkerror('bad')except networkerror,e:    print e.args

('b', 'a', 'd')



原创粉丝点击