Python自定义异常及示例

在Python中,您可以创建自定义异常类来表示特定的错误或异常情况。自定义异常类是从内置的Exception类或其子类继承的。

在本文中,我们将尝试通过示例介绍如何在 Python 中自定义异常。 

例子:

class CustomError(Exception):
    pass

raise CustomError("Example of Custom Exceptions in Python")

Output: CustomError: Example of Custom Exceptions in Python

当代码出错时,Python会抛出错误和异常,这可能会导致程序突然停止。Python 还借助try-except提供了异常处理方法。一些最常见的标准异常包括 IndexError、ImportError、IOError、ZeroDivisionError、TypeError 和 FileNotFoundError。

Python 中用户定义的异常

异常需要直接或间接从 Exception 类派生。虽然不是强制性的,但大多数异常都被命名为以“Error”结尾的名称,类似于 python 中标准异常的命名。例如

# 一个用于创建用户自定义异常的Python程序
# MyError类继承自超类Exception
class MyError(Exception):

	# 构造函数或初始化器
	def __init__(self, value):
		self.value = value

	# __str__用于打印异常的值
	def __str__(self):
		return(repr(self.value))

try:
	raise(MyError(3*2))

# 异常的值存储在error中
except MyError as error:
	print('发生了新的异常:', error.value)

输出:

发生了新的异常:6

说明:在这个程序中,我们定义了一个名为MyError的自定义异常类,它继承自Python的Exception超类。我们在构造函数init中接受异常的值,并在str方法中定义了打印异常值的方式。然后,我们在try块中使用raise语句引发了MyError异常,并传递了一个值。在except块中,我们捕获了MyError异常并打印了异常的值。这允许我们创建自定义的异常类,并根据需要引发和捕获它们。

自定义异常类

要了解有关 Exception 类的更多信息,请运行以下代码:

help(Exception)

help(Exception)命令用于获取有关Python中的Exception类的帮助文档。这将提供关于Exception类及其方法和属性的信息。

示例 1:具有多重继承的用户定义类

在下面的文章中,我们创建了一个名为“Error”的类,该类派生自 Exception 类。这个基类被各种用户定义的类继承,用于处理不同类型的python引发异常和消息

# 定义Python用户自定义异常
class Error(Exception):
    """其他异常的基类"""
    pass

class zerodivision(Error):
    """当输入值为零时引发异常"""
    pass

try:
    i_num = int(input("请输入一个数字:"))
    if i_num == 0:
        raise zerodivision
except zerodivision:
    print("输入值为零,请重试!")
    print()

输出:

请输入一个数字:0
输入值为零,请重试!

示例 2:从超类异常派生错误

当模块需要处理几个不同的错误时,就会创建超类异常。执行此操作的常见方法之一是为该模块定义的异常创建基类。此外,定义了各种子类来为不同的错误条件创建特定的异常类。

# 类Error继承自超类Exception
class Error(Exception):

	# Error是Exception的派生类,但是
	# 是该模块中异常的基类
	pass

class TransitionError(Error):

	# 当操作尝试进行不允许的状态转换时引发。
	def __init__(self, prev, nex, msg):
		self.prev = prev
		self.next = nex

		# 引发的错误消息保存在msg中
		self.msg = msg

try:
	raise(TransitionError(2, 3*2, "不允许的操作"))

# 异常的值存储在error中
except TransitionError as error:
	print('发生异常:', error.msg)

输出:

发生异常:不允许的操作

如何使用标准异常作为类?

要使用标准异常作为基类,您只需在定义您的自定义异常类时将其作为基类指定即可。这样,您的自定义异常类将继承标准异常的属性和方法。

# NetworkError继承自RuntimeError
# 而不是Exception
class Networkerror(RuntimeError):
	def __init__(self, arg):
		self.args = arg

try:
	raise Networkerror("错误")

except Networkerror as e:
	print(e.args)

输出:

('错误')

说明:这段代码定义了一个名为Networkerror的自定义异常类,它继承自内置的RuntimeError异常类而不是Exception类。然后,代码尝试引发Networkerror异常,并在异常处理块中捕获异常并打印异常的参数值。

原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/python-user-defined-exceptions/

(0)
上一篇 2023年9月25日 上午6:42
下一篇 2023年9月25日 上午7:32

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注