class ValueErrorException(Exception):
pass
class BankAccount(object):
def __init__(self, balance):
self.balance = balance
def balance(self):
if self.balance<0:
raise ValueErrorException("Illegal Balance")
else:
return self.balance
x = BankAccount(-10)
打印(x.balance)
应打印错误,但打印-10。我究竟做错了什么?
答案 0 :(得分:0)
您为此.balance
类定义了属性.balance()
和方法BankAccount
。因为它们具有相同的名称,所以一个将覆盖另一个。确保它们具有单独的名称,例如:
class BankAccount(object):
def __init__(self, balance):
self._balance = balance
def balance(self):
if self._balance<0:
raise ValueErrorException("Illegal Balance")
else:
return self._balance
然后调用您的.balance()
方法(注意方括号):
>>> x = BankAccount(-10)
>>> print(x.balance())
这应该引发所需的异常。
答案 1 :(得分:0)
在 init 中,将值-10分配给self.balance,而从不调用方法balance()。您可能想要的是使用属性和设置器。这样,每次为平衡分配一个值时,都会执行一次检查:
class BankAccount(object):
def __init__(self, balance):
self.balance = balance
@property
def balance(self):
return self._balance
@balance.setter
def balance(self, value):
if value < 0:
raise ValueError("Illegal Balance")
self._balance = value
此外,ValueError是python中的内置异常,您不需要自己的Exception类。