• python 之 面向对象 (异常处理)


    7.15 异常处理

    1、什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止

    2、一个异常分为三部分: 异常的追踪信息 异常的类型 异常的值

    3、异常的分类: 语法异常,逻辑上的异常

    语法:

    单分支
    try:
         print('start.....')
         x=1
         y
         l=[]
         l[3]
         d={'a':1}
         d['b']
         print('end....')
     except NameError:
         print('变量名没有定义')
    print('other.....')         #start..... 变量名没有定义 other.....
    多分支
    try:
        print('start.....')
        x=1
        # y
        l=[]
        l[3]
        d={'a':1}
        d['b']
        print('end....')
    except NameError:
        print('变量名没有定义')
    except KeyError:
        print('字典的key不存在')
    except IndexError:
        print('索引超出列表的范围')
    print('other.....')     # start.....  索引超出列表的范围 other.....
    多种异常采用同一段逻辑处理
    try:
        print('start.....')
        x=1
        # y
        l=[]
        # l[3]
        d={'a':1}
        d['b']
        print('end....')
    except (NameError,KeyError,IndexError):
        print('变量名或者字典的key或者列表的索引有问题')
    print('other.....') #start.....  变量名或者字典的key或者列表的索引有问题  other....
    万能异常
    try:
        print('start.....')
        x=1
        # y
        l=[]
        # l[3]
        d={'a':1}
        # d['b']
        import os
        os.aaa
        print('end....')
    except Exception:
        print('万能异常---》')
    print('other.....') #start..... 万能异常---》other.....
    获取异常的值
    try:
        print('start.....')
        x=1
        y
        l=[]
        l[3]
        d={'a':1}
        d['b']
        import os
        os.aaa
        print('end....')
    except Exception as e:
        print('万能异常---》',e)
    print('other.....')#start.....  万能异常---》 name 'y' is not defined  other.....

    7.151 try....else...

    else: 不能单独使用,必须与except连用,意思是:else的子代码块会在被检测的代码没有出现过任何异常的情况下执行

    try:
        print('start.....')
        # x=1
        # # y
        print('end....')
    except NameError as e:
        print('NameError: ',e)
    except KeyError as e:
        print('KeyError: ',e)
    except Exception as e:
        print('万能异常---》',e)
    else:
        print('在被检测的代码块没有出现任何异常的情况下执行')
    print('other.....')#start.....  end....  在被检测的代码块没有出现任何异常的情况下执行 other.....

    7.152 try...finally....

    try:
        print('start.....')
        # x=1
        # # y
        print('end....')
    except Exception as e:
        print('万能异常---》',e)
    finally:
        print('无论有没有异常发生,都会执行')
    print('other.....')#结果:start..... end.... 无论有没有异常发生,都会执行 other.....
    #如果检测到异常:start..... 
    #万能异常---》  name 'y' is not defined 
    #无论有没有异常发生,都会执行 other.....

    finally的子代码块中通常放回收系统资源的代码

    try:
        f=open('a.txt',mode='w',encoding='utf-8')
        f.readline()
    finally:
        f.close()
    print('other....') #报错 但文件关闭  (other....不执行)

    7.153 主动触发异常

    class People:
        def __init__(self,name):
            if not isinstance(name,str):
                raise TypeError('%s 必须是str类型' %name)
            self.name=name
    ​
    p=People(123)       # TypeError: 123 必须是str类型

    断言

    stus=[]
    assert len(stus) > 0
    print('part2.........')
    print('part2.........') #AssertionError

    自定义异常

    class RegisterError(BaseException):
        def __init__(self,msg,user):
            self.msg=msg
            self.user=user
    ​
        def __str__(self):
            return '<%s:%s>' %(self.user,self.msg)
    ​
    raise RegisterError('注册失败','teacher')   #__main__.RegisterError: <teacher:注册失败>
  • 相关阅读:
    获取具体地址的经纬度
    git更换 拉取推送地址
    array_merge 优化调整
    重启电脑后,redis 6380端口关闭重启
    清空git默认的用户名和密码,
    对一个给定的二维数组按照指定的键值进行排序
    Vim编辑器-批量注释与反注释
    Linux信号处理
    Linux 进程间通信
    mkdir
  • 原文地址:https://www.cnblogs.com/mylu/p/11166581.html
Copyright © 2020-2023  润新知