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用户定义的异常 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中的异常。