zoukankan      html  css  js  c++  java
  • 异常处理

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

    异常包含三个部分:

      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('我自定义的异常')
  • 相关阅读:
    事件使用(转 )
    使用Dotfuscator 进行.Net代码混淆 代码加密的方法
    Git分布式版本控制系统学习笔记
    免费SVN服务器笔记
    如何设置mysql远程访问及防火墙设置
    c# GridControl怎么换行
    模拟Post登陆带验证码的网站
    c#控制打印机杂项
    ssh 自动登录
    mysql 使用记号
  • 原文地址:https://www.cnblogs.com/wddxx/p/13675355.html
Copyright © 2011-2022 走看看