Python 异常捕获

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在低语森林神秘的深处,在月光银色的笼罩下,新手巫师们中间流传着一个传闻,说出现了一位魔法森林灵魂导师。据说这位难以捉摸的导师掌握着 Python 这门蜿蜒曲折的语言的知识,它能掌控代码的结构。找到这位导师就能学习捕捉异常的古老技艺——一种让代码能够处理不可预测的错误咒语而不致使魔法本身崩溃的方法。

一天晚上,你发现自己站在一棵古老的橡树下,它的叶子闪烁着空灵的光芒。就在这里,在森林的中心,你将学习导师的秘密。你的目标是掌握 Python 中捕捉异常的神秘技艺,确保即使意外发生,你的咒语也不会中断。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-271525{{"Python 异常捕获"}} end

识别潜在的诅咒

在这一步中,你将学习识别 Python 咒语(代码)中可能出现诅咒(错误)的潜在位置。让我们先编写一个有时可能出错的简单咒语。我们将创建一个药水混合脚本,该脚本会尝试将药水分成更小的瓶子,但任何明智的巫师都知道,绝不能除以零。

~/project 中打开一个名为 potion_dividing.py 的文件,并添加以下代码:

def divide_potions(total_potions, vial_count):
    return total_potions / vial_count

## 尝试将 10 瓶药水分成 2 个小瓶
print(divide_potions(10, 2))

在终端中使用以下命令运行你的代码:

python ~/project/potion_dividing.py

你应该会看到输出:

5.0

这表明药水成功分开。

现在,修改 potion_dividing.py 脚本以包含一个有风险的咒语情况。

print(divide_potions(10, 0))  ## 这个咒语很危险,应该进行处理!

你应该会看到输出:

Traceback (most recent call last):
  File "/home/labex/project/potion_dividing.py", line 6, in <module>
    print(divide_potions(10, 0))
  File "/home/labex/project/potion_dividing.py", line 2, in divide_potions
    return total_potions / vial_count
ZeroDivisionError: division by zero

执行改进后的脚本将向你展示需要捕获的被诅咒的异常。在这个实验中,我们将学习优雅地处理此类情况。

编织一个保护咒语

在经历了除以零的诅咒之后,现在是时候使用 tryexcept 子句来编织一个保护咒语了。更新 potion_dividing.py 脚本,以防范此类灾难性后果。

def divide_potions(total_potions, vial_count):
    try:
        return total_potions / vial_count
    except ZeroDivisionError:
        return "巫师绝不除以零!"

## 尝试安全地分药水
print(divide_potions(10, 2))
print(divide_potions(10, 0))  ## 这应该不再引发诅咒

在终端中再次使用以下命令运行改进后的脚本:

python ~/project/potion_dividing.py

你的代码现在应该能够优雅地处理异常,并且不会出现错误,而是会打印出一条警告消息:

5.0
巫师绝不除以零!

总结

在这个实验中,我们在魔法森林的场景中探索了 Python 异常的神秘领域。我们学习了如何识别潜在的错误,以及如何施展保护咒语(try/except 块)来保护我们的代码免受意外灾难的影响,同时不打断咒语的流程。

在我们的旅程结束时,我们不仅遇到了除零错误,还掌握了避免其混乱影响的技巧,使我们的代码更加健壮,不易受到混乱力量的干扰。

当你继续你的编码冒险时,请记住魔法森林灵魂导师的话:“明智的巫师总是预料到意外,并使用保护子句来保护咒语。”