上一章Python教程请查看:python3异常处理:try,except和finally
在本文中,你将学习如何根据你的需求自定义异常。
Python有许多内置的异常,这些异常会在程序出错时强制程序输出错误。
然而,有时你可能需要创建服务于你的目的的自定义异常。
在Python中,用户可以通过创建一个新类来定义此类异常,这个异常类必须直接或间接地从异常类派生,大多数内置异常也是从这个类派生出来的。
>>> 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程序时,最好将程序引发的所有用户定义的异常放在单独的文件中。许多标准模块都这样做,它们分别将异常定义为exception.py或error.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("恭喜你!你猜对了。")
在这里,我们定义了一个名为Error的基类。
程序实际引发的另外两个异常(ValueTooSmallError和ValueTooLargeError)是从这个类派生出来的,这是在Python编程中定义用户定义异常的标准方法,但你并不仅限于此。
评论前必须登录!
注册