##################################################
目录
##################################################
活动简介
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…
…
欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!
##################################################
初识 Python 异常
——————————
异常与抛出异常概念
如果 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 "<stdin>", line 1, in <module>
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 异常执行
实际开发中 为了能够处理复杂的异常 通常会有多个异常判断:
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>