• python-异常


     

     除零异常   ZeroDivisionError  

    名称异常    NameError  

    类型异常    TypeError

    索引异常    IndexError

    键异常       KeyError 

    值异常      ValueError

    属性异常   AttributeError

    迭代器异常   StopIteration 

    错误信息的获取:

    错误信息中最后一行的第一个单词

    异常处理方案一

    捕获所有错误:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

    except:

        print('你输入错误')         #出错后,进行处理的代码

    根据错误类型进行捕获:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

        num = 8/num

    except ValueError :

        print('请输入正确的整数')         #出错后,进行处理的代码

    except ZeroDivisionError :

        print('除0错误')

    说明:except后面是错误信息,可以有多个

    多种异常一起处理:

    try:
        #s=1/0
        print(name)
    except (ZeroDivisionError,NameError):  #同时捕获不同异常
        print('除0异常或名称异常')

    捕获未知错误:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

        num = 8/num

    except ValueError :

        print('请输入正确的整数')         #出错后,进行处理的代码

    except Exception as cuowuxinxi:

    print('错误信息:%s'%cuowuxinxi)

    说明:cuowuxinxi保存返回的错误信息,这个错误信息和错误类型不一样

    这个应该在所有预测到的错误类型之后

    异常捕获的完整语法:

    finally与return相遇时,先执行finally再return

    异常处理方案二

    with open('1.png','r') as f:#会自动执行__enter__方法,把返回的文件对象赋值给f
        #不管下面的代码是否出现异常,都会执行__exit__即自动退出文件
        f.readline()

    自定义上下文管理器:

    
    
    class Test:
    def __enter__(self):
    print('enter')
    return self
    def __exit__(self, exc_type, exc_val, exc_tb):
    print('exit:')
    print(self, exc_type, exc_val, exc_tb)

    with Test() as x:
    print('body',x)
     

    执行以上代码时的结果是:

    enter    --->先执行预处理函数__enter__ 
    body <__main__.Test object at 0x0000009D1DDAD518>  --->执行代码,x是__enter__函数的返回值
    exit:     --->最后执行退出函数
    <__main__.Test object at 0x000000DE4971D518> None None None

    
    
    class Test:
    def __enter__(self):
    print('enter')
    return self
    def __exit__(self, exc_type, exc_val, exc_tb):
    print('exit:')
    print(exc_type, ',',exc_val,',', exc_tb)
    return True #返回True不会再抛出异常信息

    with Test() as x:
    print('body')
    1/0 #产生异常,把异常信息传给__exit__函数
     

    显示结果:

    exc_type--->异常类型
    exc_val--->异常值
    exc_tb--->追踪信息
    
    
    class Test:
        def __enter__(self):
            print('enter')
            return self
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('exit:')
            print(exc_type, ',',exc_val,',', exc_tb)
            import traceback
            print(traceback.extract_tb(exc_tb)) #打印追踪信息
            #[<FrameSummary file D:/ss/ssss/test1.py, line 15 in <module>>]
            return True
    
    with Test() as x:
        print('body')
        1/0

    人为抛出异常raise:

    def a(age):
        if age<0 or age>120:
            #print('年龄值错误')
            raise ValueError('年龄值错误')
            #ValueError  是异常类型
            #参数  提示信息。except ValueError as x,这个参数会赋值给x
        else:
            print('张三的年龄是',age)
    
    a(-18)

     自定义异常类型:

     

    class lesszero(Exception):#自定义异常类,继承与Exception
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
    def a(age):
        if age<0 or age>120:
            raise lesszero('年龄值错误')  #抛出自定义异常类-执行异常类
            #参数传给msg
        else:
            print('张三的年龄是',age)
    
    try:
        a(-18)
    except lesszero as x:  #x就是__str__返回的值
        print('异常被处理',x)  #异常被处理 年龄值错误

    天子骄龙

  • 相关阅读:
    javascript中依赖属性(Dependency Property)的实现
    金山卫士UI原理解析(2)CBkWindow
    WTL学习笔记(5)双缓冲技术和动画(BufferedPaint)
    数据结构队列
    Windows下如何自定义窗体控件
    金山卫士UI原理解析(1)
    WTL学习笔记(4)控件加强
    WTL学习笔记(5)系统皮肤管理
    小笨开始冬眠了:)
    送时尚数码展门票
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10855833.html
Copyright © 2020-2023  润新知