zoukankan      html  css  js  c++  java
  • Python入门day34——异常处理

    异常处理

    1. 什么是异常
      异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止
      
      print('start....')
      [1,2,3][1000] # IndexError: list index out of range
      print('stop...')
      
      1.1 异常处理的三个特征
      1.异常的追踪信息
      2.异常的类型
      3.异常的内容
      
    2. 为何处理异常
      为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序
      而是捕捉异常并处理:将出错信息记录到日志内
      
    3. 如何处理异常?
      • 3.1 语法上的错误SyntaxError
      处理方式一:必须在程序运行前就改正
      if 1>3
          print("run...") # SyntaxError: invalid syntax
      
      • 3.2 逻辑上的错误
      print(x) # NameError: name 'x' is not defined
      
      l=['a','b']
      l[2] # IndexError: list index out of range
      
      1/0 # ZeroDivisionError: division by zero
      
      int('abc') # ValueError: invalid literal for int() with base 10: 'abc'
      
      dic={'name':'egon'}
      dic['age'] # KeyError: 'age'
      
      class Foo:
          pass
      
      Foo.x # NameError: name 'x' is not defined
      
      • 3.3 针对逻辑上的异常又分成两种处理方式

        3.2.1 错误发生的条件是可以预知的,使用if判断来解决

        age=input('>>: ').strip() # 输入的只要不是数字就会出错
        if age.isdigit(): # 判断是不是数字  是就运行下面代码
            age=int(age)
            if age > 18:
                print('猜大了')
            elif age < 18:
                print('猜大了')
            else:
                print('猜对了')
        else: # 不是数字就运行之后程序
            print('必须输入数字')
        

        3.2.2 错误发生的条件是无法预知的

        print('start...')
        try:
            # 有可能会抛出异常的代码
            子代码1
            子代码2
            子代码3
        except 异常类型1 as e:
            pass
        except 异常类型2 as e:
            pass
        ...
        else:
            如果被检测的子代码块没有异常发生,则会执行else的子代码
        finally:
            无论被检测的子代码块有无异常发生,都会执行finally的子代码
        
        print('end...')
        

        用法一

        print('start...')
        
        try:
            print('1111111111')
            l=['aaa','bbbb']
            l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
            print('2222222222')
            xxx
            print('33333333')
            dic={'a':1}
            dic['a']
        except IndexError as e:
            print('异常的信息: ',e)
        
        print('end....')
        
        # 结果
        start...
        1111111111
        异常的信息:  list index out of range
        end....
        

        用法二

        print('start...')
        
        try:
            print('1111111111')
            l=['aaa','bbbb']
            # l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
            print('2222222222')
            xxx
            print('33333333')
            dic={'a':1}
            dic['a']
        except IndexError as e:
            print('异常的信息: ',e)
        except NameError as e:
            print('异常的信息: ',e)
        
        print('end....')
        
        # 结果
        start...
        1111111111
        2222222222
        异常的信息:  name 'xxx' is not defined
        end....
        

        用法三

        print('start...')
        
        try:
            print('1111111111')
            l = ['aaa', 'bbbb']
            l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
            print('2222222222')
            xxx
            print('33333333')
            dic = {'a': 1}
            dic['aaa']
        except Exception as e:  # 万能异常
            print('所有异常都可以匹配的到')
        print('end....')
        
        # 结果
        start...
        1111111111
        所有异常都可以匹配的到
        end....
        

        用法四:else不能单独与try配合使用,必须要搭配except

        print('start...')
        
        try:
            print('1111111111')
            print('2222222222')
            print('33333333')
        else:
            print('====>')
        
        print('end....') # SyntaxError: invalid syntax
        

        用法五:finally可以单独与try配合使用

        print('start...')
        
        try:
            print('1111111111')
            l = ['aaa', 'bbbb']
            l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
            print('2222222222')
            xxx
            print('33333333')
            dic = {'a': 1}
            dic['aaa']
        finally: # 不处理异常,无论是否发生异常都会执行finally的子代码
            print('====》》》》》应该把被检测代码中回收系统资源的代码放到这里')
        
        print('end....')
        
        # 结果
        start...
        1111111111
        ====》》》》》应该把被检测代码中回收系统资源的代码放到这里
        IndexError: list index out of range
        
  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/yding/p/12714969.html
Copyright © 2011-2022 走看看