zoukankan      html  css  js  c++  java
  • 异常处理

        异常处理


    一、什么是异常

    二、常用的异常

    AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    三、异常处理

    1. 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except IndexError as e: # 未捕获到异常,程序直接报错
    5     print(e)

    2. 多分支

    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except IndexError as e:
    5     print(e)
    6 except KeyError as e:
    7     print(e)
    8 except ValueError as e:
    9     print(e)

    3. 万能异常

    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except Exception as e:
    5     print(e)

    不同的异常有不同的处理逻辑,使用多分支异常,万能异常可以用在多分支中的一个。

    万能异常要放在最后,要不然就先进入万能异常了。。。

    s1 = 'hello'
    try:
        a=s1[10]
    
    except KeyError as e:
        print(e)
    except Exception as e:
        print('Exceptions',e)
    except ValueError as e:
        print('ValueError',e)
    except IndexError as e:
        print('IndexErrors',e)

    会进入到万能异常中,而不进入IndexErrors里面,所以万能异常要放在最后。

    4. else、finally

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    #except Exception as e:
    #    print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论异常与否,都会执行该模块,通常是进行清理工作')

    5.主动抛异常

    1 try:
    2     raise TypeError('类型错误')
    3 except Exception as e:
    4     print(e)

    6.自定义异常

    class EgonException(BaseException):
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
    
    try:
        raise EgonException('类型错误')
    except EgonException as e:
        print(e)

    7.断言 assert

    听说这玩意不常用,了解下吧

    assert后面的条件不为真的时候,抛出AssertionError异常

    1 a_str='hello'
    2 assert type(a_str)== str
    3 assert type(a_str)== int #会抛出AssertionError异常
  • 相关阅读:
    数据库字段包含反斜杠的查询处理
    sql中的日期时间处理
    查询时间的测试
    group by 和 聚合函数的使用
    比较版本号
    sql IIF函数的应用
    win10系统杀毒功能
    php性能的问题
    linux 下ab压力测试
    datatables的学习总结
  • 原文地址:https://www.cnblogs.com/litzhiai/p/8027770.html
Copyright © 2011-2022 走看看