1 、异常
- 程序在运行的时候,如果python解释器遇到一个错误,会停止程序的执行,并且提示一些错误的信息,这就是异常。
- 可能出现的哟长时由于用输入或者操作异常引起的,我们在程序开发的时候,很难将所有的特殊情况都处理,所以通过异常捕获可以针对突发事件做集中处理,从而保证程序的健壮性和稳定性
- 在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确),可以增加try来捕获异常
2 捕获异常的格式
try:
<尝试执行的代码>
except <错误类型1>:
<针对错误类型1,对应的代码处理>
except <错误类型2>:
<针对错误类型2,对应的代码处理>
except Exception as <变量>
<针对不可知的异常类型的处理代码>
else:
<当没有出现上述异常会执行的代码,出现异常不会执行>
finally:
<无论是否有异常一定会执行的代码>
3、应用示例
计算两个数相除,可能出现的异常:
1 输入的数据类型异常
2 输入除数为0
try:
a = int(input(':'))
b = int(input(':'))
except ValueError :
print('输入错误,请输入正确的整数')
else:
try:
result = a/b
print(result)
except ZeroDivisionError :
print('错误! 除数不能为0')
finally:
print('底线'.center(50,'*'))
运行显示:不论出现那种异常,代码都能顺利的执行完成
[kiosk@foundation47 time]$ python3 04.py
:1
:w
输入错误,请输入正确的整数
************************底线************************
[kiosk@foundation47 time]$ python3 04.py
:2
:0
错误! 除数不能为0
************************底线************************
[kiosk@foundation47 time]$ python3 04.py
:4
:2
2.0
************************底线************************
4 、异常的传递
再代码执行的过程中,一旦出现异常,会一级一级的传递异常,最终到造成该异常出现的地方,如果是调用的函数造成异常,最终将会在函数的定义中报出异常。
7 def in_number():
8 a = int(input(':'))
9 return a
10 def func(x):
11 result = 10 / x
12 return result
13
14 print(func(in_number()))
tu 1
tu 2
所以该类异常可以直接在函数定义的时候进行捕获处理,这样在其他的代码再次调用该函数的时候不会出现报错。
def in_number():
try:
a = int(input(':'))
except ValueError :
print('输入错误,请输入正确的整数')
else:
return a
def func(x):
try:
result = 10 / x
except ZeroDivisionError :
print('错误! 除数不能为0')
except Exception as e:
print('其他错误:',e)
else:
return result
print(func(in_number()))
5 、主动抛出异常
在脚本中,为了保证达到一定的条件,可以将没有达到条件的情况设置为异常,并且主动抛出,当该异常抛出并且没有被捕获处理的时候,程序会出现报错,终止运行。ex = Exception(异常类型)
# 生成异常并且由一个变量接收raise ex
# 主动抛出异常
示例:计算10以上的两个数的加法。输入的数字小于10 生成异常并且主动抛出。
def add():
try:
a = int(input(':'))
b = int(input(':'))
except Exception as e:
print('输入异常!')
else:
if a >10 and b >10 :
return a+b
ex = Exception('输入的数字小于10!') # 生成异常
raise ex # 主动抛出异常
try:
print(add())
except Exception as f : # 在调用的时候需要接收该异常,否则出现报错,程序无法运行
print(f)
6、断言
格式:
assert (条件), '异常类型’
说明:
就是说提前规定这个条件必须满足,一旦不满足这个条件的时候,就会出现异常,并且异常类型已经在后面指定好了。
a = input(':')
assert (a != '0'),'输入为零'
print(a)
#运行结果:
:0 # 输入为0的时候
Traceback (most recent call last):
File "/home/kiosk/PycharmProjects/python/time/06.py", line 8, in <module>
assert (a != '0'),'输入为零'
AssertionError: 输入为零 # 出现异常,并且异常类型为指定好的类型