• 异常处理


    一、什么是异常处理

    异常是错误发生的信号,一旦程序出错就会产生一个异常,
    如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止。

    异常包含三个部分:

    1. traceback异常的追踪信息
    2. 异常的类型
    3. 异常的信息
      在这里插入图片描述
      错误分为两大类:
      1.语法上的错误:在程序运行前就应该立即修正
      2.逻辑上的错误

    二、为何要异常处理

    避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性

    三、如何异常处理

    try:  #try监听下面的代码块
        代码1
        代码2
        代码3
        ......
    except NameError:
        当抛出的异常时 NameError时执行的子代码块
    
    # 异常处理:
    try:
        print('====>1')
        print('====>2')
        print('====>3')
        l = [1,2,3]
        l[100] #IndexError  #运行到此处直接跳到except下的代码块
        print('====>4')  #不执行
    except IndexError:
        print('IndexError')
    
    #异常处理多分支
    try:
        print('====>1')
        print('====>2')
        print('====>3')
        l = [1,2,3]
        d = {'x':1,'y':2}
        d['z'] #KeyError
        l[100] #IndexError  #运行到此处直接跳到except下的代码块
        print('====>4')  #不执行
    except IndexError:
        print('IndexError')
    except KeyError:
        print('KeyError')
    
    print('other code')
    
    
    try:
        print('====>1')
        print('====>2')
        print('====>3')
        l = [1,2,3]
        d = {'x':1,'y':2}
        # d['z'] #KeyError
        # l[100] #IndexError
        print('====>4')  #不执行
    except (KeyError,IndexError) as e:  #(KeyError,IndexError)捕捉其中一种异常
        print(e)
    

    万能异常类型 Exception :可以捕捉任意类型的异常

    try:
        print('====>1')
        print('====>2')
        print('====>3')
        l = [1,2,3]
        d = {'x':1,'y':2}
        d['z'] #KeyError
        l[100] #IndexError
        print('====>4')  #不执行
    except Exception as e:  # as 给异常起别名
        print(e)
    print('other code')
    

    try + else...: else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行

    try:
        print('=====1')
        print('=====2')
        print('=====3')
        d = {'x': 1, 'y': 2}
        # d['z']  # KeyError
        # xxx
        print('=====4')
        l = [1, 2, 3]
        # l[1000]  # IndexError
        print('=====5')
    except IndexError as e:
        print('IndexError:', e)
    except KeyError as e:
        print('KeyError:', e)
    except Exception as e:
        print('Exception:',e)
    else:
        print('else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行')
    print('other code')
    
    

    try + finally... :无论finally前面被检测的代码有没有异常都会执行

    try:
        f=open('a.txt','w')
        print('=====1')
        print('=====2')
        print('=====3')
        d = {'x': 1, 'y': 2}
        # d['z']  # KeyError
        # xxx
        'xx' > 10
        print('=====4')
        l = [1, 2, 3]
        # l[1000]  # IndexError
        print('=====5')
    
    except IndexError as e:
        print('IndexError:', e)
    except KeyError as e:
        print('KeyError:', e)
    # except Exception as e:
    #     print('Exception:',e)
    else:
        print('else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行')
    finally:
        print('无论被检测的代码有没有异常都会执行')
        f.close()
    
    # 主动触发异常
    print('===>1')
    print('===>2')
    raise TypeError('类型错误')
    print('===>3')
    
    class People:
        def __init__(self,name,age):
            self.__name=name
            self.__age=age
    
        def tell_info(self):
            print(self.__name,self.__age)
    
        def set_info(self,name,age):
            if not isinstance(name,str):
                raise TypeError('名字必须是str类型')
            if not isinstance(age,int):
                raise TypeError('年龄必须是int类型')
            self.__name=name
            self.__age=age
    
    obj=People('egon',18)
    # print(obj.__dict__)
    # obj.tell_info()
    
    obj.set_info('egon',123)
    obj.tell_info()
    
    #自定义异常类型
    class MyException(BaseException):
        def __init__(self,msg):
            super().__init__()
            self.msg=msg
    
        def __str__(self):
            return '<%s>' %self.msg
    
    raise MyException('我自定义的异常')
    
  • 相关阅读:
    linux ps查看进程命令
    linux distribution是什么?
    samba配置smb.conf
    linux samba.tar.gz安装和配置
    linux后台执行命令&
    linux crontab任务调度的使用
    linux ubuntu卸载软件
    vue-router
    vue computed
    vue 监听的使用
  • 原文地址:https://www.cnblogs.com/baohanblog/p/12143862.html
Copyright © 2020-2023  润新知