Python 中的 finally 块

PythonBeginner
立即练习

介绍

在古埃及法老的宫殿中,一幅充满神秘魅力和复杂象形文字的场景展开了。埃及女王凭借其深邃的智慧,遇到了一个严峻的挑战:用于维持尼罗河洪水平衡的神圣文字有永远失传的风险。你作为一位值得信赖的智者,被召唤到宫殿,利用 Python 的 finally 块的力量构建一个可靠的系统,以确保这些文字得以保存。

你的目标是打造一个坚不可摧的文字守护者,即使面对不可预见的错误也能履行职责。运用你的技能,你将指导构建 Python 脚本,通过 finally 块处理异常和保证执行的操作,确保女王的神圣文字能经受住任何考验。

构建 try - except - finally 的神殿

在这一步中,你将通过创建一个在执行过程中能够抵御任何潜在故障的 Python 文件,来为你的文字守护者奠定基础。你将使用 Python 的 tryexceptfinally 块来完成此操作。

~/project 中打开一个名为 transcript_keeper.py 的文件。在这个文件中,编写一个 Python 脚本,尝试从一个可能不存在的文件中读取一份重要的文字记录。如果文件缺失,处理该异常,并使用 finally 块打印一条消息,确保已经执行了一些关键的清理操作。

以下是要放入 transcript_keeper.py 中的代码:

def preserve_script():
    try:
        with open('/home/labex/project/sacred_script.txt', 'r') as file:
            contents = file.read()
            print(contents)
    except FileNotFoundError:
        print('The sacred script cannot be found.')
    finally:
        print('Ensuring the preservation environment remains intact.')

preserve_script()

现在,在终端中使用以下命令运行你的脚本:

python3 ~/project/transcript_keeper.py

如果 sacred_script.txt 不存在,它应该显示错误消息,然后是 finally 块的消息:

The sacred script cannot be found.
Ensuring the preservation environment remains intact.

将逻辑铭刻于石

在创建了基本结构之后,现在是时候将保护逻辑铭刻于石,使其永久保存了。在这一步中,你将通过添加无论读取操作是否成功都必须始终执行的操作,来增强文字守护者。

修改 transcript_keeper.py,在 finally 块中添加一个模拟的清理操作,该操作表示将脚本环境的状态保存到日志文件中。

transcript_keeper.pyfinally 块末尾添加以下内容:

def preserve_script():
    try:
        with open('/home/labex/project/sacred_script.txt', 'r') as file:
            contents = file.read()
            print(contents)
    except FileNotFoundError:
        print('The sacred script cannot be found.')
    finally:
        print('Ensuring the preservation environment remains intact.')
        with open('/home/labex/project/preservation_log.txt', 'a') as log_file:
            log_file.write('Preservation check completed\n')

preserve_script()

再次运行修改后的脚本,并检查 preservation_log.txt 是否有日志条目。

终端上应显示以下信息:

$ python3 ~/project/transcript_keeper.py
The sacred script cannot be found.
Ensuring the preservation environment remains intact.
$ cat /home/labex/project/preservation_log.txt
Preservation check completed

总结

在这个实验中,你踏上了一段前往古埃及的旅程,在那里你运用对 Python 的 finally 块的了解,确保了女王神圣文字记录的连续性。借助 finally 块,你创建了一个强大的系统,该系统能保证某些操作(如记录日志)无论在执行过程中遇到任何错误都会执行。

通过这次神秘的冒险,你了解了清理操作的重要性以及如何使用 Python 的 finally 块来实现它们。这个安全网确保了你的脚本的关键操作能够完成,让你对代码的韧性充满信心。愿你在 Python 的领域中的旅程继续像古埃及的古老智慧一样具有启发性。