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

      1 '''
      2 异常概念:
      3 在程序运行期间,总会遇到各种各样的错误,有些错误是程序编写有问题造
      4 成的,这种错误我们叫bug,bug是必须修复的。有些错误是用户输入有问题
      5 造成的,这种错误可以通过检测用户输入的内容来做相应的处理。还有一些
      6 错误是无法在程序运行过程中预测的,比如从网络抓取数据,网络突然中断,
      7 这类错误称之为异常,异常在程序运行期间也是必须处理的,否则,程
      8 序也会因为这些问题而终止。
      9 '''
     10 # print("hello wordl")
     11 # 程序语法无错误,编译无错误,但结论错误:逻辑异常  --- 必须处理
     12 
     13 # print(10 / 0)   # 程序语法无错误,运行出错:运行时错误  --- 必须处理
     14 
     15 # print(num)  # 程序语法错误:编译异常   ---  必须处理
     16 
     17 
     18 # 使用异常:当程序运行时出现错误,不让程序在该位置终止,可以继续进行
     19 # 其他操作。
     20 '''
     21 语法格式:
     22 try:
     23     语句(预测可能会出现问题的语句)
     24 except 错误码1 as e:
     25     语句1(错误处理语句)
     26 [except 错误码2 as e:
     27     语句2(错误处理语句)
     28 ...
     29 except 错误码n as e:
     30     语句n(错误处理语句)
     31 ]
     32 [else:
     33     语句n+1
     34 ]
     35 注:else:可有可无
     36 作用:用来检测try语句中的代码块是否有错误,如果有,让except语句
     37 捕获错误信息并处理。
     38 逻辑:当程序执行到try…except…else语句时:
     39 1、如果try后面的语句在执行时出现异常,python就跳回try语句并
     40 执行第一个匹配到该异常的except语句,异常处理完毕后,程序会通过
     41 整个try语句(除非在处理异常时又产生新的异常)
     42 2、如果try后面的语句在执行时出现异常,但是并没有匹配到except语句,
     43 异常将会被提交到最上层的try语句,或者程序的最上层(程序会被终止,
     44 并打印错误信息)。
     45 3、如果try后面的语句在执行时没有出现异常,python会执行else后面的语
     46 句(如果else语句存在的话),然后程序会通过整个try语句向下继续执行。
     47 '''
     48 '''
     49 # 1、能够匹配到异常
     50 try:
     51     # print(10 / 0)
     52     # print(num)
     53     print("heloo")
     54 except ZeroDivisionError as e:
     55     print(e)
     56     print("你的代码出问题啦,除数为0啦")
     57 except NameError as e:
     58     print(e)
     59     print("NameError,可能名字出错啦")
     60 else:
     61     print("异常处理结束啦,可以正常运行啦")
     62 
     63 print("我在程序末尾,快看我")
     64 '''
     65 # 2、异常匹配失败, 如果匹配失败,程序终止
     66 '''
     67 try:
     68     print(10 / 0)
     69 except NameError as e:
     70     print("名字错误")
     71 
     72 print("可不可以输出???")
     73 '''
     74 
     75 # 3、使用except,但不匹配任何错误,异常能够被正常处理,但异常名称不确定
     76 '''
     77 try:
     78     # print(10 / 0)
     79     print(num)
     80 except:
     81     print("程序异常,能继续执行")
     82 print("lalalalal")
     83 '''
     84 # 4、else语句可有可无
     85 '''
     86 try:
     87     # print(10 / 0)
     88     print("123")
     89 except ZeroDivisionError as e:
     90     print(e)
     91 else:
     92     print("我是else语句")
     93 print(1234567890123)
     94 '''
     95 # 5、使用except语句一次性匹配多个异常,except后面使用元组格式,
     96 # 将可能出现的异常放在一个元组中。
     97 '''
     98 try:
     99     # print(10 / 0)
    100     # print(num)
    101     li = [0,1]
    102     print(li[100])
    103 except (ZeroDivisionError, NameError, KeyError, IndexError):
    104     print("ZeroDivisionError, NameError, KeyError")
    105 print("-----------------------")
    106 
    107 '''
    108 # 6、特殊应用
    109 # 6.1、错误其实是class(类),所有的错误都继承于BaseException,
    110 # 如果在捕获异常时,如果遇到BaseException这个异常,会将子类全部忽略。
    111 # 注:当先匹配到子类的异常,BaseException则被忽略
    112 '''
    113 try:
    114     print(10 / 0)
    115 except ZeroDivisionError as e:
    116     print("ZeroDivisionError")
    117 except BaseException as e:
    118     print("BaseException")
    119 
    120 print('***************************')
    121 '''
    122 # 注:当先匹配到BaseException的异常,后面写的子类的异常则被忽略
    123 '''
    124 try:
    125     print(10 / 0)
    126 except BaseException as e:
    127     print("BaseException")
    128 except ZeroDivisionError as e:
    129     print("ZeroDivisionError")
    130 
    131 print("******************************")
    132 '''
    133 # 6.2、可以跨越多层捕获的,fun3调用fun2,fun2调用fun1,
    134 # 实际上是fun1有问题,但只要是try能够捕获到,就能够处理
    135 '''
    136 def fun1():
    137     print(10 / 0)
    138 def func2():
    139     fun1()
    140 def func3():
    141     func2()
    142 
    143 try:
    144     func3()
    145 except ZeroDivisionError as e:
    146     print(e)
    147 print(1234567)
    148 '''
    149 '''
    150 try…except...finally
    151 语法格式:
    152 try:
    153     语句(预测可能会出现问题的语句)
    154 except 错误码1 as e:
    155     语句1(错误处理语句)
    156 [except 错误码2 as e:
    157     语句2(错误处理语句)
    158 ...
    159 except 错误码n as e:
    160     语句n(错误处理语句)
    161 ]
    162 [finally:
    163     语句n+1
    164 ]
    165 注:finally:可有可无
    166 finally: 无论有没有异常,都会执行(如果有finally语句的话)
    167 '''
    168 '''
    169 try:
    170     # print(10 / 0)
    171     print(20)
    172 except ZeroDivisionError as e:
    173     print(e)
    174 finally:
    175     print("我是finally")
    176 print(1234567)
    177 '''
    178 
    179 # 断言
    180 # 语法格式:assert 参数1, 参数2
    181 # 解释:
    182 # 第一个参数为判断条件,当条件成立时,代码继续向下执行;
    183 # 当条件不成立时,程序直接结束在assert语句,提出AssertionError;
    184 # 第二个参数:为错误提示语
    185 
    186 def func666(num1, num2):
    187     assert num2 != 0, "你的第二个参数不能为0,而你传了0"
    188     print(num1 / num2)
    189 func666(10, 2)
    190 func666(10, 0)
  • 相关阅读:
    Git基本操作二
    Git基本操作一
    Mysql查询一
    接口的token验证
    Laravel模型的一些小技巧
    AOP编程思想实现全局异常处理
    5.4 RegExp类型
    5.4.1 RegExp实例属性
    5.4.2 RegExp实例方法
    5.4.3 RegExp构造函数属性
  • 原文地址:https://www.cnblogs.com/BKY88888888/p/11266142.html
Copyright © 2011-2022 走看看