12.异常

1.异常  

常见异常


未定义变量异常


格式异常


类型错误

异常本身是类的实例


Python的异常结构(基于继承)

在Python中所有的异常都是继承自BaseException,分为四大类:

    1)SystemExit:Python退出异常
    2)KeyboardInterrupt: 键盘打断(Ctrl+C)
    3)GeneratorExit: 生成器退出(以后会说明)
    4)Exception: 普通异常(只会使用这部分的异常)

错误回溯


2.处理异常

当出现异常时,首先编译器会报错,再者报错行之后的代码全部无法执行,为解决异常,执行如下:

基本的try...except...

try:
    print('-----1-----') #1句正确
    print(a)             #2句错误
    print('-----3-----') #3句正确
except:
    print('出现错误')
-----1-----
出现错误

try中放可能出现错误的代码段,except中写出现异常后的操作,但此时并没有提示为何出错

捕获具体异常

except后可写上捕获的具体异常类型,还可以通过as把捕获的异常信息储存到后边的变量中

try:
    print('-----1-----') #1句正确
    print(a)             #2句错误
    print('-----3-----') #3句正确
except NameError as info:
    print('捕获到异常代码,下面为异常信息')
    print(info)
-----1-----
捕获到异常代码,下面为异常信息
name 'a' is not defined

捕获多种异常

#写法一 写多个except
try:
    pass
except NameError:
    pass
except TabError:
    pass
#写法二 在except后用括号把异常括起来
try:
    pass
except(NameError,TabError) as info:
    pass

关于 Exception 及其 子类 的解释

代码中会出现的异常都是 Exception 的子类, 一般都会在except最后加上 Exception以免错误遗漏

在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找

更加丰富的结构

try:
    print('-----1-----') #1句正确
    print(a)             #2句错误
    print('-----3-----') #3句正确
except NameError as info:
    print('捕获到异常代码,下面为异常信息')
    print(info)
else:
    print('没有错误,执行我')
finally:
    print('不管是否出错,都会执行我')

注意事项:

1. try       下面放可能出错的代码 
2. except  try下面的代码出错后,会执行except下面的代码
3. else      try下面代码没有错误,执行else下面的代码

4. finally 不管try下面的代码有没有出错,始终都会执行

自定义异常

    class Myerror(Exception): #自定义一场必须继承Exception类

            pass

raise 主动抛出异常

    格式:riase 异常类型

      注意:raise是主动抛出后面写的异常类型,后面的代码全部终止运行(except仍会执行)

class Myerror(Exception):
    pass
try:
    print('-----1-----') #1句正确
    print(a)             #2句错误
    print('-----3-----') #3句正确
    raise NameError
    print('-----4-----')
except NameError as info:
    print('捕获到异常代码,下面为异常信息')
    print(info)
else:
    print('没有错误,执行我')
finally:
    print('不管是否出错,都会执行我')
捕获到异常代码,下面为异常信息
name 'a' is not defined
不管是否出错,都会执行我

3.断言 assert

语法:

    assert 表达式

表达式返回True 不把错

表达式返回False 报 AssertionError

assert  1==1
assert  1==2,'报错了'
Traceback (most recent call last):
  File "/home/pyvip/py_case/venv/newfile.py", line 2, in <module>
    assert  1==2,'报错了'
AssertionError: 报错了

猜你喜欢

转载自blog.csdn.net/weixin_42089175/article/details/80575783