📜  在Python中定义清理动作

📅  最后修改于: 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'