python 自定义异常和主动抛出异常(raise)的操作

  • Post category:Python

当Python程序中出现异常时,程序将停止执行并抛出该异常。然而,有时候我们需要捕获并处理特定的异常,或者自定义特殊的异常类型。这时,就需要使用Python的自定义异常和主动抛出异常机制。

Python 自定义异常

在Python中,我们可以通过继承Exception类来创建自己的异常。一般来说,自定义异常需要提供一个有用的错误信息,以便开发者在程序出错时可以快速定位错误的位置和原因。

下面是一个简单的自定义异常示例:

class MyCustomError(Exception):
    def __init__(self, message):
        super().__init__(message)
        self.message = message

try:
    raise MyCustomError('发生了一个自定义异常')
except MyCustomError as e:
    print(f'发生错误: {e.message}')

在上面的代码中,我们定义了一个名为MyCustomError的子类,继承了Exception类。该类重写了__init__方法,用于传递异常信息,同时添加了一个message属性,用于存储自定义的错误信息。

在主程序中,我们使用raise关键字来主动抛出一个自定义异常。当程序执行到raise语句时,将会停止执行并抛出MyCustomError异常。在except语句中,我们捕获该异常并打印异常信息。

主动抛出异常

Python内置了许多标准异常类型,如ValueError、TypeError等。有时候,我们希望在程序特定的情况下手动抛出一个标准异常。这时可以使用raise关键字来触发异常。

下面是一个简单的例子,演示了如何使用raise关键字手动抛出异常:

def divide_numbers(a, b):
    if b == 0:
        raise ValueError('分母不能为零')
    return a / b

try:
    result = divide_numbers(10, 0)
except ValueError as e:
    print(f'发生错误: {e}')

在上面的代码中,我们定义了一个名为divide_numbers的函数,该函数用于计算两个数相除的结果。在函数中,我们使用raise关键字来检查分母是否为零,若分母为零则抛出一个ValueError异常。

在主程序中,我们调用divide_numbers函数并捕获可能抛出的异常,然后打印异常信息。

除了手动抛出标准异常外,我们还可以使用自定义异常来实现类似的功能。只需要在自定义异常类中添加相应的错误信息即可。

class DivideByZeroError(Exception):
    def __init__(self):
        super().__init__('分母不能为零')

def divide_numbers(a, b):
    if b == 0:
        raise DivideByZeroError()
    return a / b

try:
    result = divide_numbers(10, 0)
except DivideByZeroError as e:
    print(f'发生错误: {e}')

以上就是Python自定义异常和主动抛出异常的简介和简单示例。对于自定义异常,我们需要使用继承Exception类的方式来创建,同时重写类的__init__方法来存储自定义的异常信息;对于主动抛出异常,我们可以使用raise关键字手动抛出标准异常或自定义异常,在主程序中捕获并处理异常。