搞不清楚Python的异常怎么用?希望这篇文章能帮到你!
前言
网络图片
异常是什么?
答:异常就是程序运行时候,发出了一个错误的信号,如果不处理这个错误信号,程序就会结束运行,终止程序,也许会造成不可预见的后果,用大白话说就是“程序崩溃了”;
为什么要在程序里“捕获异常”?
答:为了保证程序的健壮性和稳定性,避免程序在运行过程中遇到各种意想不到的情况而导致程序崩溃,一定要在必要的地方加上异常的捕获和处理,使得程序不至于崩溃;
异常的语法怎么写?在什么地方写异常的捕获?
好,下面我们进入今天的正题;
语法
在Python里,异常的一个完整的写法是这样的:
try:
“感觉这段代码可能会造成程序的任何错误,就用try框起来”
except<名字>:
“try里的代码块出错了,就会跳到这里,执行你想执行的内容”
else:
“try里的代码块如果没出错,就会跳到这里,执行你想执行的内容”
finally:
“不管try里的代码块执行正确还是错误,都会执行这一段代码块”
下面给出一个具体的例子:
程序在写文件的时候,由于各种环境工况不能较好的把握,因此并不能确保每次写文件一定有权限写成功,所以,在这里加一个异常捕获,如果写失败,抛出异常,程序还能接着往下运行,并不会崩溃,从而保证了程序的健壮性,也确保了程序代码的严谨性;
注意:
在except后面可以跟异常名,也可以什么也不跟,什么也不跟的时候,程序会捕获所有产生的异常,这在调试时并不能很准确的识别具体的异常信息,定位出错的原因,所以尽可能的带上你想要确定的异常名字;
except的用法
在写一个异常的时候,except的使用方法比较灵活,它可以不带任何异常名字(不推荐),也可以用多个except,捕获各种指定的异常,有针对性的处理各种异常情况。用法有点类似条件语句中的if、elif、else,举例如下:
上面的例子中捕获了三种不同的异常,“as”代表的是该异常类的一个实例,有时候我们需要获得这个异常里的某些详细信息,来跟踪程序的更深层次的逻辑,可以用e.value来得到具体信息;
各种异常名字
以下列举了在Python中的各种异常的名字:
用户自定义异常
如果觉得系统提供的异常不够,可以自己定义异常,然后在捕获异常那里使用“raise”关键词来主动抛出,举例子:
注意:
自定义异常类上例中SelfError就是一个自定义的异常类,可以在类里面对逻辑进行控制,打印相关信息等操作;自定义的异常类必须继承于Exception类,按照习惯写法,通常会在以“Error”结尾,它由人工通过“raise”关键词来触发;raise这个关键词的作用是主动使程序触发一个异常,在raise后面的相同级别的代码块将不会执行;
assert
最后再说一下assert这个关键词,意思是“断言”,可以理解成为“raise-if-not”,它的用法如下例:
上面例子的意思是:如果2不等于1,则触发一个异常,抛出AssertError并且包含对应的错误信息,assert通常用于程序代码的调试、防御性的检查、程序逻辑的检查等地方;
总结
合理、正确的使用异常可以使得程序更加健壮,代码结构更加清晰,但是,在写异常的时候,不要在大段的代码外面套上异常,要真正细化到具体的逻辑上;对于可预见到的异常,要通过代码疏导,同时给出合理的提示。由于篇幅原因,Python中的异常部分就介绍到这里,谢谢大家看到最后!