Python 自定义异常
Python默认提供了很多异常类型,但在实际开发中,你需要根据具体的业务需要自定义异常类型。自定义异常的方法非常简单,只需从内置的Exception
类派生一个新类即可。
class MyException(Exception):
pass
raise MyException("我的异常")
以上代码中,我们创建了一个新的异常类MyException()
,它是从内置的Exception
类派生的。当程序执行到raise MyException("我的异常")
这行代码时,就会抛出一个MyException
的异常,其中"MyException"是异常的描述文本。
自定义异常通常会包含一些额外的信息来说明异常的原因。我们可以在派生的异常类中添加初始化方法,并使用super()
调用基类的__init__()
方法来传递信息。
class BalanceNotEnough(Exception):
def __init__(self, account, balance, withdraw):
self.account = account
self.balance = balance
self.withdraw = withdraw
def __str__(self):
return f"账户{self.account}余额不足,当前余额为{self.balance},需要{self.withdraw}。"
以上代码中,我们创建了一个新的异常类BalanceNotEnough
,它接收三个参数:账户名、当前余额和需要提现的金额。初始化方法在自定义的异常类中非常常见,通过它,我们可以将一些额外的信息储存到异常对象中。在以上的例子中,我们还重载了父类的__str__()
方法,用于返回包含了可读性信息的字符串。
主动抛出异常(raise)
在Python中,我们可以通过使用raise
语句,来主动触发异常的抛出。raise
语句需要接收一个异常对象,这个对象可以是一个内置的异常类,也可以是我们自己定义的异常类。
def sqrt(n):
if n < 0:
raise ValueError("参数n不能小于0")
return math.sqrt(n)
print(sqrt(9))
print(sqrt(-1))
以上代码中,我们定义了一个函数sqrt()
,它接收一个参数n
,并计算n
的平方根。如果n
小于0,则会抛出一个ValueError
异常,包含了描述该异常的文本信息。在代码中,我们分别调用sqrt(9)
和sqrt(-1)
,因为sqrt(-1)
会触发异常的抛出,因此函数在此处结束运行,而后面的print语句则不会被执行。
另一个示例,自定义异常并在函数中抛出:
class LoginFailException(Exception):
def __init__(self, reason):
self.reason = reason
def __str__(self):
return f"登录失败:{self.reason}"
def login(username, password):
if username == "admin" and password == "123456":
print("登录成功!")
else:
raise LoginFailException("用户名或密码错误")
try:
login("admin", "1234567")
except LoginFailException as e:
print(e)
以上代码中,我们定义了一个自定义异常类LoginFailException
,用于描述登录失败的情况。在login()
函数中,如果用户名和密码匹配,就会进行登录成功的相关操作;否则就会抛出一个LoginFailException
异常,包含描述该异常的文本信息。在try
块中,我们调用函数login()
,如果函数内部会抛出异常,则会被except
块中的代码捕获并被输出到控制台上。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 自定义异常和主动抛出异常(raise)的操作 - Python技术站