📅  最后修改于: 2020-04-08 09:42:13             🧑  作者: Mango
想一想您将始终希望您的程序执行的任务,无论它运行完美还是引发任何类型的错误。例如,我们使用带有可选子句的try语句: “finally”执行清理操作,该清理操作必须在所有条件下都执行。
清除操作:在离开try语句之前,无论是否引发任何异常,始终执行“ finally”子句。这些子句旨在定义必须在所有情况下都必须执行的清理操作。
无论何时发生异常且except子句未处理该异常,首先将最终发生,然后将错误作为默认值引发[代码3]。
Python程序,说明“定义清理动作”
代码1: 代码正常工作,并在最后执行清理操作
# Python 说明“定义清理动作"
def divide(x, y):
try:
# 地板除法:仅给出非小数部分作为答案
result = x // y
except ZeroDivisionError:
print("抱歉 ! 你除以0了 ")
else:
print("棒 ! 你的答案是 :", result)
finally:
print("这是finally,总会执行!! ")
# Look at parameters and note the working of Program
divide(3, 2)
输出:
棒 ! 你的答案是 : 1
这是finally,总会执行 !!
代码2:代码引发错误,并在except子句中进行了仔细处理。请注意,最后会执行清理操作。
# Python展示清理操作
def divide(x, y):
try:
# 地板除法:仅给出非小数部分作为答案
result = x // y
except ZeroDivisionError:
print("抱歉 ! 你除以0了 ")
else:
print("棒 ! 你的答案是 :", result)
finally:
print("这是finally,总会执行!! ")
# 查看结果
divide(3, 0)
输出:
抱歉 ! 你除以0了
这是finally,总会执行 !!
代码3:代码引发错误,但是我们没有任何except子句可以处理它。因此,首先执行清理操作,然后编译器将引发错误(默认情况下)。
# Python 展示清理操作
def divide(x, y):
try:
# 地板除法:仅给出非小数部分作为答案
result = x // y
except ZeroDivisionError:
print("抱歉 ! 你除以0了 ")
else:
print("棒 ! 你的答案是 :", result)
finally:
print("这是finally,总会执行 !! ")
# 查看结果
divide(3, "3")
输出:
这是finally,总会执行 !!
报错:
Traceback (most recent call last):
File "C:/Users/DELL/Desktop/Code.py", line 15, in
divide(3, "3")
File "C:/Users/DELL/Desktop/Code.py", line 7, in divide
result = x // y
TypeError: unsupported operand type(s) for //: 'int' and 'str'