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

    1、异常与错误

        错误 分为语法错误,逻辑错误;语法错误过不了python的解释器,不符合python语言的规则,逻辑错误可通过解释器,但是输出错误

    ----------------->语法错误

    1 def test()
    2     pass
    3 ——————————
    4  File "E:/File/h.py/venv/新.py", line 17
    5     def test()
    6              ^
    7 SyntaxError: invalid syntax

    ----------------->逻辑错误

    1 x=0
    2 y=5
    3 print(y/x)
    4 -------------------
    5 Traceback (most recent call last):
    6   File "E:/File/h.py/venv/新.py", line 19, in <module>
    7     print(y/x)
    8 ZeroDivisionError: division by zero

      异常:程序运行过程中所出现的问题

    2、标准异常类型

    ZeroDiviceError:被除数写成了0
    NameError:变量未定义
    TypeError:不同类型数据进行相加
    IndexError:超出索引范围
    KeyError:没有对应名称的键
    ValueError:将字符型数据转换成整型数据
    AttributeError:对象没有对应名称的属性

    3、异常处理(try--except)

      try--except是处理异常的一种手段。例如input输入字符串强制转化为int时,可能会发生异常,若输入数字字符串,不会触发异常,若输入字母字符串,如何强制转化为int。

     1 try:
     2     age=input(">>>>")
     3     age=int(age)
     4     print(age)
     5 except ValueError as e:
     6     print('valueerror')
     7     print(e)
     8 except KeyError as e:
     9     print('keyerror')
    10     print(e)
    11 ---------------------------------
    12 >>>>alex
    13 valueerror
    14 invalid literal for int() with base 10: 'alex'

      可以看到,当输入字符串‘alex’时,并不能把他转化为int,会触发异常。程序从try直接跳转到except中,判断异常属于哪个异常类型与其匹配,可以看到,其为ValueError,跳转到对应的except,执行相应的代码块,需要注意的是as意外着将异常当作e,可打印e,看到异常;

     1 try:
     2     age=input(">>>>")
     3     age=int(age)
     4     print(age)
     5 # except ValueError as e:
     6 #     print('valueerror')
     7 #     print(e)
     8 except KeyError as e:
     9     print('keyerror')
    10     print(e)
    11 except Exception as e:
    12     print('我可是什么异常都可发现的')
    13     print(e)
    14 print('我还在执行哦')
    15 ----------------------------16 >>>>sad
    17 我可是什么异常都可发现的
    18 invalid literal for int() with base 10: 'sad'
    19 我还在执行哦

    !!!Exception异常类型可接受任何类型的异常,当异常try——except执行完,不会影响到后面代码的执行

    !!!python找异常类型是从第一个except开始找,当找到了即整个except结束,即使可能后面有与之匹配的异常

     1 try:
     2     age=input(">>>>")
     3     age=int(age)
     4     print(age)
     5 except ValueError as e:
     6     print('valueerror')
     7     print(e)
     8 except KeyError as e:
     9     print('keyerror')
    10     print(e)
    11 except Exception as e:
    12     print('我可是什么异常都可发现的')
    13     print(e)
    14 print('我还在执行哦')
    15 -----------------------------16 >>>>sad
    17 valueerror
    18 invalid literal for int() with base 10: 'sad'
    19 我还在执行哦

      当找到第一个ValueError即停止,即使后面有接受所有异常类型的Exception;;;

       当try当中抛出异常时,try异常后面的代码并不会执行,会跳转到except中

    4、try--except-else与finally

      

     1 try:
     2     age=input(">>>>")
     3     age=int(age)
     4     print(age)
     5 except ValueError as e:
     6     print('valueerror')
     7     print(e)
     8 except KeyError as e:
     9     print('keyerror')
    10     print(e)
    11 # except Exception as e:
    12 #     print('我可是什么异常都可发现的')
    13 #     print(e)
    14 else:
    15     print('我是else')
    16 finally:
    17     print('我的作用是为异常做善后清理')
    18 -------------------------------19 >>>>alex
    20 valueerror
    21 invalid literal for int() with base 10: 'alex'
    22 我的作用是为异常做善后清理

    当抛出异常时,valueerror来接异常,执行后面代码,但是else代码并未执行,fnally执行了。没有对比就没有发现!

    ###当输入123时输出
    --------------->>>>123
    123
    我是else
    我的作用是为异常做善后清理

    当输入123时,代码并未触发异常,自然不会触发except,但是else,finally都触发了!

      !!!try——except——else:当try中无异常抛出的时候,else代码会执行

      !!!try——except——finally:无论try是否触发异常,都会执行finally下的代码,finally的代码作用是善后,清理作用;例如当try中有异常有关文件的操作时,触发了异常,但文件并未close,finally作用就能体现了;

    5、raise主动触发异常

      我们可以使用raise 异常类型(“参数”)来主动触发,代码执行到此,会报异常信息参数

    1 if 1==1:
    2     raise KeyError("出错了")
    3 print('我能不能执行呢')
    4 ——————---------------
    5 Traceback (most recent call last):
    6   File "D:/MyPython/day2/venv/bokeyuan.py", line 51, in <module>
    7     raise KeyError("出错了")
    8 KeyError: '出错了'

      当然不会执行后面代码了

    6、断言(assert)

      断言是python用来检查一个语句,如果他为真,不做任何工作,如果为假,会报错

    1 assert 1==2
    2 assert 1==1
    3 -----------------------》》
    4 Traceback (most recent call last):
    5   File "D:/MyPython/day2/venv/bokeyuan.py", line 54, in <module>
    6     assert 1==2
    7 AssertionError

     

  • 相关阅读:
    枚举代码(待更新)
    数据类型
    char
    opencv中读写视频
    数据获取与存储
    Mat 与 IplImage 和 CvMat 的转换
    Mat类的输出格式
    Mat 类的内存管理
    Mat_类
    Mat表达式
  • 原文地址:https://www.cnblogs.com/XiaoJin0/p/10176398.html
Copyright © 2011-2022 走看看