• 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:注册失败>
  • 相关阅读:
    Android 自定义seekbar中,thumb被覆盖掉一部分问题
    Android SeekBar实现音量调节
    Android 设置thumb图片大小
    Android 图片处理方法
    Android 三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现
    Android SeekBar自定义使用图片和颜色显示
    Android 使控件各占屏幕的一半
    Android ExpandableListView使用+获取SIM卡状态信息
    Android的5样的调试信息
    Js创建对象的做法
  • 原文地址:https://www.cnblogs.com/mylu/p/11166581.html
Copyright © 2020-2023  润新知