代码运行前的语法或者逻辑错误
- 語法错误(这种错误根本过不了python3解释器的语法检测,必须在程序执行前就改正)
程序执行过程中出现问题导致程序无法执行
-
程序遇到逻輯或算法错误
-
运行过程中计算机错误:内存不够或者io错误
-
异常产生检查到错误且解释器认为是异常,抛出异常
-
异常处理异常处理,截獲异常系统忽略或者终止程序处理异常
python3解释器检测到错误,触发异常(也允许程序员自己触发异常)
程序员编写特定的代码专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)
如果捕捉成功则进入另外一个处理分支执行你为其定制的逻辑,使程序不會崩溃这就是异常处理
python3解析器去执行程序,检测到了一个错误时触发异常,异常触发后且没被处理的情况下程序就在当前异常处终圵,后面的代码不会运行所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性
使用if的方式我们只为第一段代码加上了异常處理,针对第二段代码你得重新写一堆if,elif等
而这些if跟你的代码逻辑并无关系,可读性差
第一段代码和第二段代码实际上是同一种异常,嘟是ValueError,相同的错误按理说只处理一次就可以了而用if,由于这二者if的条件不同这只能逼着你重新写一个新的if来处理第二段代码的异常
异常類只能用来处理指定的异常情况,如果非指定异常则无法处理(异常是由程序的错误引起的,语法上的错误跟异常处理无关必须在程序运行前就修正)
在python3的异常中,有一个万能异常:Exception他可以捕获任意异常
'丢弃或者执行其他逻辑'
try-finally 语句无论是否发生异常都将执行最后的代碼。
无论异常与否,都会执行该模块,通常是进行清理工作
我们可以使用raise语句自己触发异常
raise语法格式如下:
语句中Exception是异常的类型(例如NameError)参数是一个异常参数值。该参数是可选的如果不提供,异常的参数是"None"
最后一个参数是可选的(在实践中很少使用),如果存在是跟踪异常对象。