Python 异常引发

PythonPythonBeginner
立即练习

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

简介

欢迎来到神秘卓越编码学院——这是一所久负盛名的机构,只有最有能力的编码巫师才会聚集在此磨练技艺。你是一名年轻的巫师,最近刚加入学院,踏入充满魔法算法和复杂咒语、挑战不断的世界。

你的旅程在派索大师的指导下开启。派索大师是一位著名的竞技施法教练,在魔法领域声名远扬,以其卓越的解决问题能力和对Python魔法的渊博知识著称。在学院里,每个巫师都必须学习施法的艺术,但让巫师真正强大的是预测和应对意外情况的能力。

今天,派索大师将教你古老的异常引发艺术——这是任何有抱负的巫师的一项基本技能,能让他们控制魔法(代码)的流程,并针对施法(编程)过程中可能出现的意外错误创建故障安全机制。

本次实验的目标是让你能够编写健壮的Python代码,能够正确处理和引发异常,确保你的咒语(程序)不仅强大,而且具有弹性和安全性。做好准备,因为你即将踏上一段穿越Python异常引发神秘世界的魔法之旅!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/raising_exceptions -.-> lab-271583{{"Python 异常引发"}} end

理解异常的基础知识

在这一步中,你将学习Python中异常的基础知识。Python中的异常就像是一个意外事件,它会打乱施法序列的流程。当Python遇到错误时,它会停止当前进程,并将其沿着调用栈传递,直到被处理。如果未被处理,咒语(程序)就会崩溃,Python会打印一条错误消息。

为了模拟一个可能发生异常的场景,你将创建一个简单的Python脚本,尝试施展一个出错的咒语(执行除法运算)。

~/project 目录下打开一个名为 spellcasting.py 的文件,内容如下:

## spellcasting.py

def divide_potions(potions, wizards):
    return potions / wizards

## 尝试将魔药分给零个巫师,这将引发异常。
divide_potions(10, 0)

使用以下命令运行你的施法脚本:

python3 ~/project/spellcasting.py

你会注意到Python引发了一个 ZeroDivisionError。在下一步中,你将学习如何正确处理这个异常:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(10, 0)
  File "/home/labex/project/spellcasting.py", line 4, in divide_potions
    return potions / wizards
ZeroDivisionError: division by zero

引发自定义异常

现在该学习一种更高级的施法技巧了——引发你自己的异常。这能让你创建并使用自定义错误消息,使你的咒语更灵活且可控。

在这一步中,你将修改 spellcasting.py 脚本,以便在向 divide_potions 函数传递的巫师数量不正确时引发自定义的 Exception

首先,相应地修改 spellcasting.py 中的 divid_potions 函数:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

## 再次尝试故意出错来分配魔药。
divide_potions(20, 0)

保存更改后,再次运行修改后的脚本:

python3 ~/project/spellcasting.py

这次,Python 将引发自定义的 Exception 消息:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(20, 0)
  File "/home/labex/project/spellcasting.py", line 3, in divide_potions
    raise Exception("Cannot divide potions among zero wizards!")
Exception: Cannot divide potions among zero wizards!

使用try-except处理异常

在这一步中,你将学习如何使用 try-except 块优雅地处理异常。对于一名巫师来说,确保你的咒语(程序)能够从错误中恢复是一项至关重要的技能。

spellcasting.py 脚本中,在 divide_potions 函数调用周围添加 try-except 块:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

try:
    ## 尝试分配魔药并处理潜在错误。
    result = divide_potions(30, 0)
    print(f"Each wizard receives {result} potions.")
except Exception as e:
    print(f"Spell failed: {e}")

在终端中运行此代码:

python3 ~/project/spellcasting.py

现在,当你运行该脚本时,它不会崩溃,而是会打印输出:

Spell failed: Cannot divide potions among zero wizards!

总结

在本次实验中,我们踏上了探索Python异常引发这片神奇领域的旅程。我们首先通过让一个异常自然发生来介绍异常,接着学习了如何创建我们自己的异常和消息,最后掌握了在不破坏我们的咒语(程序)的情况下处理这些异常的技巧。

你现在已经掌握了Python中引发和处理异常的基础知识,这项技能无疑会在你作为编码巫师的旅程中对你大有帮助。这不仅有助于提高你的程序的健壮性和用户友好性,还教会你预测和应对意外行为——让你的咒语万无一失,让你作为巫师的实力令人敬畏。

愿代码与你同在,年轻的魔法师。