Python 异常处理机制是在程序运行中处理异常情况并采取相应的措施的一种机制。在 Python 中,当程序运行出现错误或异常时,会立即中断程序的执行,Python 解释器会抛出异常,并输出异常信息。为了避免程序因此而崩溃或终止,我们需要对异常进行处理。Python提供了一种异常处理机制,即try...except...finally语句,使程序可以在发生异常时执行一些特定操作。
异常的基本使用方法是try...except...finally。try块中包含可能出现异常的代码,当try块内代码执行出错时,就会抛出异常,此时控制权交由except块,except块通常用来捕获和处理异常。finally块中包含一些无论之前try和except中发生了什么都会被执行的代码。
下面是一个简单的try...except...finally代码片段的例子:
try:
# 可能会出现异常的部分
print(1/0)
except ZeroDivisionError:
# 异常处理部分
print('除数不能为0')
finally:
# 无论是否出现异常,finally中的代码都会被执行
print('结束')
这段代码会输出“除数不能为0”和“结束”。可以看到,在try块中,我们将1除以0,这是一个错误的操作,会抛出一个ZeroDivisionError异常。当except块捕获到这个异常时,会输出“除数不能为0”。最后,在finally块中,无论是否出现异常,都会输出“结束”。
除了上面的基本使用方法,Python提供了其他的一些特殊的异常处理方式,包括捕获多个异常、抛出自定义异常等。下面我们来逐一介绍。
- 捕获多个异常
在try块中,可能会出现多种类型的异常,每个类型的异常都需要捕获和处理。如果我们使用多个except语句分别捕获,代码会显得冗长。此时,我们可以使用一个except语句来捕获多种类型的异常。
例如,假设我们需要对两个数字进行除法运算,但用户可能会输入0或非数字,导致程序出错。我们可以通过捕获两种异常来处理这种情况:
try:
num1 = int(input("请输入被除数:"))
num2 = int(input("请输入除数:"))
result = num1 / num2
print(result)
except (ValueError, ZeroDivisionError):
print("输入错误或除数不能为0")
当用户输入非数字或0时,会触发ValueError或ZeroDivisionError异常,except块中的代码会被执行。
- 抛出自定义异常
有时候,Python内置的异常类不够满足我们的需求,我们希望抛出自己的异常来引起程序的注意。Python允许我们自定义异常类,并在需要时抛出该类的异常。
定义自定义异常类时,需要继承Exception类或其子类,并定义好异常类的名称、信息等。例如,我们可以定义一个名为MyException的自定义异常类,当输入数字小于0时,抛出该异常:
class MyException(Exception):
def __init__(self, message):
super().__init__(message)
try:
num = int(input("请输入数字:"))
if num < 0:
raise MyException("数字不能小于0")
print("输入正确")
except MyException as e:
print(e)
当输入数字小于0时,会抛出MyException异常,except块中的代码会被执行,并输出相应的错误信息。
以上是Python异常处理机制的基本介绍,通过合理地使用try...except...finally语句,我们可以避免程序因错误或异常而崩溃,增强程序的健壮性和稳定性。同时,Python还提供了其他特殊的异常处理方式,如捕获多个异常、抛出自定义异常等,可以根据需要进行使用,使代码更加简洁、清晰。