• Python面向对象 杂篇(后记)


    异常处理

    什么是异常:
            我们在调试程序时,常常会因为各种报错信息导致程序无法运行,异常也是一个对象,用来表示错误。我们可以捕捉异常,并做相应处理,从而增加代码的友好程度。
    异常处理:
            捕捉异常可以使用try/except语句。当代码运行过程中遇到try语句时,会先执行其中的代码,如果正常执行,则跳过except语句继续向下执行;如果触发异常,则执行except语句,由except语句进行异常处理。
    try:
        pass
    except Exception:
        pass
    
    异常的种类:
    python中的异常非常多,每种异常都可以找到专门的异常来处理。这里仅列举一些常见异常
    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError 语法错误
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    FloatingPointError 浮点计算错误
    OverflowError 数值运算超出最大限制
    RuntimeError 一般的运行时错误
    

    当我们指定异常的种类时,则只能处理相应的异常,其他种类的异常捕获不到

    dir = {'k1':'v1','k2':'v2'}
    try:    
        a = dir['k3']
        print(a)
    except KeyError:   #捕捉到相应异常
        print('no such key')
    >>>
    no such key
    
    a='zhang'
    try:
        int(a)
    except TypeError: #指定的异常种类不正确,无法捕捉异常
        print('error')
    >>>
    Traceback (most recent call last):
      File "C:/Users/issuser/PycharmProjects/Python/day9/socket client.py", line 11, in <module>
        int(a)
    ValueError: invalid literal for int() with base 10: 'zhang'
    
    写程序时,有时候要考虑处理多个异常,可以写多个except,不过要注意匹配的异常范围一个是从小到大,以免无法捕获相应的异常。
      万能异常:python中还有一个异常可以捕获所有的异常,它就是Exception,可以捕获所有的异常。
    a = 'zhang'
    try:
        int(a)
    except TypeError:
        print('type error')
    except Exception:   #可以捕获所有异常,保证程序运行
        print('other error')
    

     在异常中,我们还可以使用else,如果没有触发异常,则继续执行else代码。如果触发异常,则处理异常,不再执行else。

    try:
        # 主代码块
        pass
    except KeyError,e:
        # 异常时,执行该块
        pass
    else:
        # 主代码块执行完,执行该块
        pass
    finally:
        # 无论异常与否,最终执行该块
        pass
    

     try/finally形式,当执行完try块后,无论是否出发异常,都执行finally块。

    try:
        # 主代码块
        pass
    except KeyError:
        # 异常时,执行该块
        pass
    else:
        # 主代码块执行完,执行该块
        pass
    finally:
        # 无论异常与否,最终执行该块
        pass
    

     除了捕获代码异常外,还可以主动触发异常(实在想不起有什么鸟用)

    try:
        raise IndexError('error')  #raise主动触发异常,注明异常的种类
    except TypeError:
        print('type error')
    except IndexError:            #相应的异常捕获主动触发的异常
        print('index error')
    >>>
    index error
    

     断言:

    # assert 条件
     
    assert 1 == 1    #条件为真时,返回空值
     
    assert 1 == 2    #条件为假时,返回异常
    

    反射

  • 相关阅读:
    Function overloading and return type
    Function overloading and const keyword
    Function Overloading in C++
    web安全测试相关内容(三)
    web安全测试相关内容(二)
    web安全测试相关内容(一)
    CDNDrive 第一个版本发布 & 布客新知第二次备份完成
    PyTorch 1.4 中文文档校对活动正式启动 | ApacheCN
    布客&#183;ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.2
    计算机电子书 2019 BiliDrive 备份
  • 原文地址:https://www.cnblogs.com/ernest-zhang/p/5635052.html
Copyright © 2020-2023  润新知