详解Python 定义自己的异常类

  • Post category:Python

Python中的异常类可以帮助开发者更加方便地处理程序中出现的异常情况。在某些特定的情况下,如果程序中出现了自定义异常,可以更好地解决某些问题。在Python中定义自己的异常类是非常简单的,可以分为以下步骤:

1. 异常类的定义

通过继承Exception类来定义自己的异常类,如下示例:

class MyException(Exception):
    def __init__(self, message):
        self.message = message
    def __str__(self):
        return self.message

以上代码中,我们自定义了一个名为MyException的异常类,继承了Python中的Exception类,需要传递一个message参数初始化,__str__方法将异常信息转化为字符串。

2. 抛出异常

在程序中遇到特定的情况,如果需要抛出自定义异常,可以使用raise语句来实现,如下所示:

age = 10
if age < 18:
    raise MyException("You are too young to visit.")

以上代码中,如果年龄小于18岁,将抛出MyException异常。

3. 异常处理

在程序中遇到异常情况,可以通过try...except语句来捕获异常,如下所示:

try:
    num = int(input("Please input a number:"))
    if num < 0:
        raise MyException("The number cannot be negative.")
except MyException as e:
    print(e)

以上代码中,如果输入的数字为负数,将抛出MyException异常并被except捕获并打印异常信息。

示例一

下面是一个例子。在这个例子中,我们创建了一个名为DivisorZeroError的异常类,用于处理除数为0的情况。我们通过raise语句在程序中抛出该异常,并通过try...except语句用于处理这个异常。

class DivisorZeroError(Exception):
    pass

try:
    x = int(input("Please enter a number: "))
    y = int(input("Please enter a number the second time: "))
    if y == 0:
        raise DivisorZeroError("Divisor cannot be zero.")
    result = x / y
    print("Result is:", result)
except DivisorZeroError as e:
    print(e)

该程序会提示用户输入两个数字并计算它们的商。当用户输入的第二个数字为0时,会抛出自定义异常DivisorZeroError,并打印出错误信息。

示例二

下面是另外一个例子。在这个例子中,我们创建了一个名为InvalidInputError的异常类,用于处理无效输入的情况。如果输入的字符不是数字,我们通过raise语句抛出该异常。

class InvalidInputError(Exception):
    pass

try:
    x = input("Please enter a number: ")
    if not x.isnumeric():
        raise InvalidInputError("Invalid input.")
    result = int(x) * 10
    print("Result is:", result)
except InvalidInputError as e:
    print(e)

该程序会提示用户输入一个数字,并将输入的数字乘以10。如果用户输入的不是数字,就会抛出自定义异常InvalidInputError,并打印出错误信息。