• python异常处理


    python中错误分两种

    1.语法错误,例如缺少括号、冒号、引号等

    语法错误与异常处理没有关系,必须在程序运行前就进行修正

    2.逻辑错误:例如0做除数、列表下标超出等

    一个异常标志一种错误,常见的异常如下,在python中,每个异常就是一个类

    SyntaxError:代码非法不能编译,即语法错误

    IndentationError:语法错误(的子类),代码没有正确对齐

    AttributeError:试图访问一个对象不存在的属性,比如foo.x,但是foo没有属性x

    NameError:使用一个还未被赋予对象的变量

    IndexError:下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

    KeyError:试图访问字典里不存在的

    TypeError:传入对象类型与要求的不符合

    ValueError:传入一个调用者不期望的值,即使值的类型是正确的,例如int('29abe')

    IOError 输入/输出异常:基本上是无法打开文件

    ImportError:无法引入模块或包,基本上是路径问题或名称错误

    KeyboardInterrupt:Ctrl+C被按下

    UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它

    当程序在运行时,解释器检测到错误会触发异常,如果不对异常进行处理,程序会在当前异常处终止,后面的代码不会被执行。异常处理方法有

    1.如果错误发生的条件可预知,可用if进行处理,在错误发生之前进行预防,如

    num=input('>>: ').strip()
        if num.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
            num=int(age)*2
                print('输入数值的平方为%s'%num)

    但是if判断式的异常处理只能针对某一段代码进行处理,针对不同的代码块需要频繁进行判断,这样程序的异常处理代码会占据整个代码的很大一部分,而主逻辑部分可能并不很多。

    2.python为每一种异常定制了一个类型,并提供一种特定的语法结构来处理,基本语法如下

    try:
        被检测代码块
    except 异常类型1:
        如果try中检测到异常类型1,则执行此逻辑
    ······
    except 异常类型n:
        如果try中检测到异常类型n,则执行此逻辑
    except Exception:#Exception为万能异常,可以捕捉任何的异常
        如果try中检测到的异常类型不在上述几个之中,则执行此逻辑
    else:
        如果try中未检测到异常,则执行此逻辑
    finally:
        无论try中是否检测到异常,都执行此逻辑

    注意:使用except列出多个异常类型时,检测到的异常从上到下匹配,例如万能Exception放在第一个,并且后面还列了其它的异常类型,那么无论检测到何种类型的异常,都会匹配到第一个万能异常。

    try···except···为必须模块,else和finally可选即非必须存在,如果存在,else中的模块在try中未检测到异常时执行,而finally则无论是否检测到异常都会执行。

    3.自定义异常类

    class Define_Error(BaseException):
        def __init__(self,msg):
            self.msg=msg
      def __str__(self):
        return self.msg
    
    try :
        raise Define_Error(‘xxx错误’)
    except Define_Error as e:
        print(e)

    自定义异常类必须继承于BaseException

    主动触发异常用raise

  • 相关阅读:
    Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)
    JavaScript:最烂与最火
    JSP九大内置对象和四种属性范围解读
    codevs1009
    hdu 4869 Turn the pokers (2014多校联合第一场 I)
    OpenGL——点的绘制(使用OpenGL来绘制可旋转坐标系的螺旋线)
    nodejs 批处理运行 app.js
    jquery更新后怎样在一个站点中使用两个版本号的jQuery
    vs连接mysql出错解决方法
    uva 10627
  • 原文地址:https://www.cnblogs.com/Forever77/p/10224480.html
Copyright © 2020-2023  润新知