编辑这个页面须要登录或更高权限!

Python 自定义异常

Python有许多内置的异常,当其中的某些错误出现时,它们会强制您的程序输出错误。

但是,有时您可能需要创建符合您目的的自定义异常处理。

在Python中,用户可以通过创建新类来定义此类异常。该异常类必须直接或间接地从Exception该类派生。大多数内置异常也是从此类派生的。

>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

在这里,我们创建了一个名为CustomError的用户定义异常,该异常是从Exception类派生的。 与其他异常一样,可以使用带有可选错误消息的raise语句来引发此新异常。

当我们开发大型Python程序时,最好将程序引发的所有用户定义的异常放在单独的文件中。许多标准模块可以做到这一点。他们分别将例外定义为exceptions.py或errors.py。

用户定义的异常类可以实现普通类可以执行的所有操作,但是我们通常使它们简单明了。大多数实现都声明一个自定义基类,并从该基类派生其他异常类。在下面的示例中,将使该概念更清晰。

示例:Python中的用户定义异常

在此示例中,我们将说明如何在程序中使用用户定义的异常来引发和捕获错误。

该程序将要求用户输入一个数字,直到他们正确猜出所存储的数字为止。为了帮助他们弄清楚,将提示他们的猜测是大于还是小于存储的数字。

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

class ValueTooSmallError(Error):
   """当输入值太小时引发"""
   pass

class ValueTooLargeError(Error):
   """当输入值过大时引发"""
   pass

# 我们的主程序
# 用户猜出一个数字,直到他/她猜对为止

# 你需要猜这个数字
number = 10

while True:
   try:
       i_num = int(input("输入数字: "))
       if i_num < number:
           raise ValueTooSmallError
       elif i_num > number:
           raise ValueTooLargeError
       break
   except ValueTooSmallError:
       print("这个值太小,请再试一次!")
       print()
   except ValueTooLargeError:
       print("这个值太大,请再试一次!")
       print()

print("恭喜你! 你猜对了.")

这是该程序的示例运行。

输入数字: 12
这个值太大,请再试一次!

输入数字: 0
这个值太小,请再试一次!

输入数字: 9
这个值太小,请再试一次!

输入数字: 10
恭喜你! 你猜对了.

在这里,我们定义了一个名为Error的基类。

我们的程序实际引发的另外两个异常(ValueTooSmallError和ValueTooLargeError)是从这个类派生出来的。这是在Python编程中定义用户定义异常的标准方法,但您并不仅限于此方法。

访问此页面以详细了解如何处理Python中的异常

Python 基础教程
Python 流程控制
Python 函数
Python 数据类型
Python 文件操作
Python 对象和类
Python 日期和时间
Python 高级知识
Python 参考手册