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

    异常处理

    • 什么是异常

      ​ 异常是错误发生的信号

      ​ 程序一旦出错就会产生一个异常

      ​ 如果该异常没有被处理,该异常就会抛出来,程序的运行也随即终止

      ​ 错误分为两种:

      ​ 1、语法错误 #SyntaxError

    SyntaxError: invalid syntax

    #语法错误举例
    if  #直接运行
    SyntaxError: invalid syntax  #运行后报错 语法错误
    

    ​ 2、逻辑错误

    # 逻辑错误举例
    age = input('>>>:').strip()
    
    age = int(age)
    
    if age>19:
        print('too big')
    elif age<19:
        print('too small')
    else:
        print('you got it')
    
    ##ValueError: invalid literal for int() with base 10: 'sslls'
    
    • 为何要处理异常

      ​ 不处理程序就会崩溃

    • 如何处理异常

      语法错误-》程序运行前就必须改正确 这类错误不应该犯!!!!!

      逻辑错误-》

      ​ 针对可控制的逻辑错误,应该直接在代码层面解决

      # 针对可控的应该在代码层解决
      age = input('>>>:').strip()
      if age.isdigit():
          age = int(age)
      
          if age>19:
              print('too big')
          elif age<19:
              print('too small')
          else:
              print('you got it')
      else:
          print('必须输入数字')
        #加入if判断来防止报错导致程序崩溃
      

      ​ 针对不可控制的逻辑错误应该采用try...except...

    • try...except... 防止不可控制的逻辑错误应该采用的补救措施

      try:

      ​ 被检测的代码块

      ​ 被检测的代码块

      ​ ...

      except异常的类型1 as 变量名:

      ​ 针对异常类型1的处理代码 补救代码

      except异常的类型2 as 变量名:

      ​ 针对异常类型2的处理代码 补救代码

      ​ ...

      except Exception:

      ​ 针对除了以上异常之外所有的异常 的处理代码 补救代码

      else:

      ​ 没有发生异常时要执行的代码

      finally:

      ​ 无论异常是否,都会执行该代码,通常用来进行回收资源的操作

      try:
          被检测的代码块
      except 异常的类型1 as 变量名:
          异常处理的代码  补救
      except 异常的类型2 as 变量名:
          异常处理的代码  补救
      except 异常的类型3 as 变量名:
          异常处理的代码  补救
      except 异常的类型4,5,6 as 变量名:
          异常处理的代码  补救
      except Exception:
          处理异常的代码  补救
      
      else:
          没有发生异常时要执行的代码
      
      finally:
          无论异常是否,都会执行该代码,通常用来进行回收资源的操作
      

    • 异常处理

      为了保证程序的容错性和可靠性,即在遇到错误时有相应的处理机制不会任由程序崩溃,我们需要对异常进行处理,处理的基本形式为刚刚上面所说的 try...except...

      举例

      try :
          print('start....')
          print(x)
          print('end...')
      except NameError as e:  #as 语法将异常类型的值赋值给变量e
          print('异常值为:%s' %e)
      print('run other code...')
      
      >>>
      start....
      异常值为:name 'x' is not defined
      run other code...
      

    本来程序一旦出现异常就整体结束掉了,有了遗产给处理以后,在被检测的代码块出现异常时,被检测的代码块中异常发生位置之后的代码将不会执行,取而代之的是执行匹配异常的except子代码块,其余代码均正常运行。

    当被检测的代码块中有可能触发不同类型的异常时,针对不同类型的异常:

    如果我们想分别用不同的逻辑处理,需要用到多分支的except(类似于多分枝的elif,从上到下依次匹配,匹配成功一次便不再匹配其他)

    try 可以和except
    也可以和 finally
    而else必须有except时候才能有
    

    断言

    # 断言
    # 测试代码时候用
    
    l = [111,222,333]
    if len(l):
        raise Exception('必须达到三个值')
    print('后续代码?、、')
    raise
    
  • 相关阅读:
    HeidiSQL 导入Excel数据
    两片74门实现的双边沿D触发器
    java多线程
    java集合框架
    java异常处理
    java基础学习5
    java基础学习4
    Java基础学习3
    Java基础学习2
    LeetCode 184场周赛
  • 原文地址:https://www.cnblogs.com/cnblogswilliam/p/14293339.html
Copyright © 2011-2022 走看看