跳至主要內容

7. 异常处理

小白debug大约 4 分钟

7. 异常处理

今天我们将学习如何在程序中处理一些意想不到的情况,就好像,你在给你喜欢的女生送早餐的时候,她男朋友出现了,这属于一种异常情况,你需要办法去处理异常,以保证你跟这个女生的友谊正常,甚至天长地久。

说不下去了,哭了。

什么是异常?

首先,让我们聊聊什么是异常。在编程中,异常就像是程序遇到的一些突发情况,比如你要读取一个文件,但文件突然不存在了。

# 举个例子,假设你要打开一个文件
file = open("non_existent_file.txt", "r")  # 这里会产生一个FileNotFoundError异常

上面的代码会产生一个 FileNotFoundError 异常,因为文件不存在。异常会打断程序的正常执行。

不处理异常:程序崩溃

如果我们不对异常进行处理,程序就会崩溃。就像下面这样:

file = open("non_existent_file.txt", "r")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.txt'

这种情况显然是我们不希望看到的。为了避免程序崩溃,我们需要学会如何处理异常。

捕获异常:让程序保持优雅

有时候,我们可以预见到某些情况可能会引发异常。比如说,当我们尝试将一个字符串转换为数字时,如果字符串不是一个合法的数字,就会产生一个异常。

这时候,我们可以使用 tryexcept 关键字来捕获异常,让程序继续执行下去,而不会崩溃。

try:
    num = int(input("请输入一个数字: "))
    print("你输入的数字是:", num)
except ValueError:
    print("这不是一个有效的数字!")

在这个例子中,我们尝试将用户输入的内容转换为数字。如果用户输入的不是一个合法的数字,就会引发一个 ValueError 异常,然后程序会执行 except 块中的代码。

多重异常:针对不同情况做出不同处理

有时候,我们可能会遇到多种不同类型的异常,而我们希望针对不同类型的异常做出不同的处理。这时候,我们可以使用多个 except 块。

try:
    num = int(input("请输入一个数字: "))
    print("你输入的数字是:", num)
except ValueError:
    print("这不是一个有效的数字!")
except ZeroDivisionError:
    print("除数不能为零!")

在这个例子中,我们同时处理了 ValueErrorZeroDivisionError 两种可能的异常情况。

各种错误类型的讲解

在 Python 中,有许多不同类型的异常,比如:

  • ValueError:当一个函数接收到一个不合适的值时引发。
  • TypeError:当操作或函数应用于不适当类型的对象时引发。
  • FileNotFoundError:当尝试打开不存在的文件时引发。
  • KeyError:当试图访问字典中不存在的键时引发。
# 举个例子
try:
    num = int("hello")  # 这里会产生一个ValueError
except ValueError:
    print("发生了一个ValueError异常!")

使用 finally

除了 tryexcept 块,我们还可以使用 finally 块。无论是否发生异常,finally 块中的代码都会被执行。

try:
    num = int(input("请输入一个数字: "))
    print("你输入的数字是:", num)
except ValueError:
    print("这不是一个有效的数字!")
finally:
    print("无论发生了什么,我都会被执行!")

finally 块通常用于在代码块执行后进行清理工作,比如关闭文件或释放资源。这确保了无论是否发生异常,都会执行这些清理操作。

实战例子:一个简单的除法计算器

让我们来动手实践一下!我们将制作一个简单的除法计算器,用户可以输入两个数字,程序将计算它们的商。

try:
    num1 = int(input("请输入第一个数字: "))
    num2 = int(input("请输入第二个数字: "))
    result = num1 / num2
    print(f"{num1} 除以 {num2} 的结果是: {result}")
except ValueError:
    print("输入的不是有效的数字!")
except ZeroDivisionError:
    print("除数不能为零!")

总结

通过这篇文章,我们学习了如何使用异常处理来保证程序在遇到意外情况时也能保持优雅的运行。我们了解了如何使用 tryexcept 关键字来捕获异常,以及如何处理不同类型的异常情况。同时,我们也学会了使用 finally 块来执行无论如何都要执行的代码。

希望你现在对异常处理有了更清晰的理解。异常处理是编程中一个非常重要的概念,它可以让我们的程序更健壮、稳定。继续加油,你已经迈出了成为 Python 大师的重要一步!

训练营看视频