异常处理

异常处理

  • 什么是异常

    ​ 异常是错误发生的信号

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

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

    ​ 错误分为两种:

    ​ 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
posted @ 2021-01-18 16:20  williamgess  阅读(79)  评论(0编辑  收藏  举报