Python异常处理及注意事项

简介:Python异常处理及注意事项

异常处理是对可预见的错误进行处理,比如我们在开发web接收前端参数时,可能接收参数类型以及值可能错误,此时我们可以抛出异常,在异常捕获中输出可视化的提示信息给用户。

python的异常捕获以及执行的顺序和其他语言有点不同,有些特点需要我们特别注意,今天我们就来介绍一下python的异常捕获方式及代码执行顺序问题

1. 捕获方式

python的异常捕获方式和其他语言有点不同,大多数编程语言都是 try/catch/finally 的形式,但是python是try/except/finally 的形式。如下所示:

try:
    print('逻辑处理代码块')
except KeyError as e:
    print('异常逻辑处理,错误信息:{}'.format(e))
finally:
    print('不管有没有异常都会执行的代码块')

一般情况下,如果没有异常抛出以及错误,代码会执行的顺序是:try中代码块 =》finally中的代码块

2. 抛出异常时执行的顺序

如果try中抛出了异常或者错误,此时执行的顺序是:try中的代码块 =》except捕获的异常代码块 =》finally中的代码块

其中except是捕获异常的类型,如果try代码块中抛出的异常与except中捕获的异常类型不同时,代码会直接报错。例如下面的案例中,我们抛出了一个ValueError错误,except中却只捕获的KeyError错误,此时代码执行就会报错:

try:
    print('逻辑处理代码块')
    raise ValueError('测试不同类型的异常捕获')
    # raise KeyError('测试')
except KeyError as e:
    print('异常逻辑处理,错误信息{}'.format(e))
finally:
    print('不管有没有异常都会执行的代码块')

代码执行结果如下所示:

从结果中看出,代码实际执行的顺序是:try代码块=》finally代码块 =》继续抛出未捕获的异常

如果想要捕获多个异常,可以使用如下方式:

try:
    print('逻辑处理代码块')
    raise ValueError('测试不同类型的异常捕获')
except KeyError as e:
    print('key异常逻辑处理,错误信息:{}'.format(e))
except ValueError as e:
    print('value异常逻辑处理,错误信息:{}'.format(e))
finally:
    print('不管有没有异常都会执行的代码块')

如果多个异常的处理逻辑相同时,可以使用元组的方式定义捕获的异常,具体实现方式如下:

try:
    print('逻辑处理代码块')
    raise ValueError('测试不同类型的异常捕获')
except (KeyError,ValueError) as e:
    print('多个异常逻辑处理相同时的写法,错误信息:{}'.format(e))
finally:
    print('不管有没有异常都会执行的代码块')

如果想要捕获所有异常,可以直接捕获 Exception 类型的异常。Exception是所有异常类和错误的基类,所以捕获 Exception 异常就等于捕获了所有异常。具体代码如下:

try:
    print('逻辑处理代码块')
    raise ValueError('测试不同类型的异常捕获')
except Exception as e:
    print('异常逻辑处理,错误信息:{}'.format(e))
finally:
    print('不管有没有异常都会执行的代码块')

注意:except 后面的是捕获的异常类型

使用 Exception 捕获异常后,执行结果如下:

逻辑处理代码块
异常逻辑处理,错误信息:测试不同类型的异常捕获
不管有没有异常都会执行的代码块

4. else的作用

异常捕获除了上面的格式之外,还提供了一个 else else代码块是没有异常时才执行的代码块,也就是说 try 中的代码块没有异常才会执行 else 中的代码块。这个是python中特有的,其他大多数编程语言中都不存在这个else代码块

try:
    print('逻辑处理代码块')
except Exception as e:
    print('异常逻辑处理,错误信息:{}'.format(e))
else:
    print('没有异常')
finally:
    print('不管有没有异常都会执行的代码块')

执行顺序:逻辑处理代码块 =》没有异常=》不管有没有异常都会执行的代码块

5. exit()函数使用后执行的顺序

exit() 函数是终止程序的意思,但是如果我们在try中使用 exit() 终止程序后,它依然会执行 finally 中的代码块。这一点和大多数编程语言都不一样,例如。PHP中使用 exit() 后面的程序就终止执行了,即使使用try/catch/finally捕获最后也不会执行到 finally 中。

例如下方python代码中,使用了exit() 终止程序后,它依然执行了 finally 中的代码:

try:
    print('逻辑处理代码块')
    exit()
except Exception as e:
    print('异常逻辑处理,错误信息:{}'.format(e))
else:
    print('没有异常')
finally:
    print('不管有没有异常都会执行的代码块')

执行结果:

逻辑处理代码块
不管有没有异常都会执行的代码块

 

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1