##################################################
目录
##################################################
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…
…
欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!
##################################################
——————————
如果 Python 解释器遇到一个错误 就会停止程序的执行 并且提示一些错误信息 这就是异常了
程序停止解释执行并且提示错误信息 这个动作我们称之为 抛出/raise 异常
程序运行时如果遇到错误就会抛出异常
程序开发中很难将所有的特殊情况都处理的面面俱到
而通过异常捕获可以针对突发事件做集中的处理 达到保证程序的稳定性和健壮性的目的
——————————
如果对某些代码的执行不能确定是否正确 可以增加 try/尝试 语句来试图捕获异常
try 表示尝试 后面编写要尝试的代码 即不确定是否能够正常执行的代码
except 如果不是 则在后面编写尝试失败的代码
捕获异常最简单的语法格式:
- try:
- # 尝试执行的代码
- except:
- # 出现错误的处理
%%%%%
示例 要求输入数字的时候输入字母 会异常 如果被捕捉到就会执行我们安排好的错误处理代码:
- >>> try:
- ... num = int ( input("请输入数字 <<< ") )
- ... except:
- ... print ( "请输入正确的数字.." )
- ...
- 请输入数字 <<< a
- 请输入正确的数字..
- >>> try:
- ... num = int ( input("请输入数字 <<< ") )
- ... except:
- ... print ( "请输入正确的数字.." )
- ...
- 请输入数字 <<< 521
- >>>
如果没有异常处理就会报错:
- >>> num = int ( input("请输入数字 <<< ") )
- 请输入数字 <<< a
- Traceback (most recent call last):
- File "
" , line 1, in - ValueError: invalid literal for int() with base 10: 'a'
- >>>
——————————
在程序执行时 可能会遇到不同类型的异常 并且需要针对不同类型的异常做出不同的响应
这个时候就需要捕获错误类型 根据不同的错误类型执行不同的处理 语法如下:
- try:
- # 尝试执行的代码
-
- except 错误类型_1:
- # 错误类型_1 的对应代码处理
-
- except (错误类型_2, 错误类型_3):
- # 错误类型_2 和 错误类型_3 的对应代码处理
-
- except Exception as result:
- # 未知异常
- print ( "未知错误 [%s]" % result )
当 Python 解释器抛出异常时 最后一行错误信息的第一个单词就是错误类型!
%%%%%
VSCode code:
- try:
- num = int ( input ( "请输入整数 <<< " ) )
- result = 1314 / num
- print ( result )
-
- except ValueError:
- print ( "请输入正确的整数!!!" )
-
- except ZeroDivisionError:
- print ( "零除错误..." )
VSCode demo:
- Windows PowerShell
- 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
-
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< 2
- 657.0
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< A
- 请输入正确的整数!!!
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< 0
- 零除错误...
- PS C:\Users\byme>
%%%%%
在开发中如果要预判所有可能出现的错误 还是有一定难度的
所以如果希望程序无论出现任何错误 都不会因为 Python 解释器抛出异常而被终止
可以再增加一个 except 结构 语法如下:
- except Exception as result:
- print ( "..未知错误 >>> [%s]" % result )
示例如下 VSCode code:
- try:
- num = int ( input ( "请输入整数 <<< " ) )
- result = 1314 / num
- print ( result )
-
- except Exception as result:
- print ( "..未知错误 >>> [%s]" % result )
执行如下 VSCode demo:
- Windows PowerShell
- 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
-
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< 0
- ..未知错误 >>> [division by zero]
- PS C:\Users\byme>
——————————
实际开发中 为了能够处理复杂的异常 通常会有多个异常判断:
else 块是只有在没有异常时才会执行的代码
finally 块表示无论是否有异常都会执行该快的代码
复杂异常处理语法如下:
- try:
- # 尝试执行的代码
- except 错误类型_1:
- # 错误类型_1 的对应代码处理
- except 错误类型_2:
- # 错误类型_2 的对应代码处理
- except ( 错误类型_3, 错误类型_4 ):
- # 错误类型_3 和 错误类型4 的对应代码处理
- except Exception as result:
- # 打印未知错误信息
- print ( result )
- else:
- # 没有异常时才会执行的代码
- finally:
- # 无论是否有异常 都会执行的代码
示例程序如下 VSCode code:
- try:
- num = int ( input ( "请输入整数 <<< " ) )
- result = 10 / num
- print ( result )
-
- except ValueError:
- print ( "请输入正确的整数!" )
-
- except ZeroDivisionError:
- print ( "除零错误!!" )
-
- except Exception as result:
- print ( "未知错误 [%s] !!!" % result )
-
- else:
- print ( "正常执行通过.." )
-
- finally:
- print ( "执行完毕但是不保证没问题.. ..")
执行效果如下 VSCode demo:
- Windows PowerShell
- 版权所有 (C) 2014 Microsoft Corporation。保留所有权利。
-
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< 2
- 5.0
- 正常执行通过..
- 执行完毕但是不保证没问题.. ..
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< a
- 请输入正确的整数!
- 执行完毕但是不保证没问题.. ..
- PS C:\Users\byme> python -u "e:\PY\test.py"
- 请输入整数 <<< 0
- 除零错误!!
- 执行完毕但是不保证没问题.. ..
- PS C:\Users\byme>