有谁知道为什么ValueErrorException没有显示?

时间:2019-11-12 19:23:27

标签: python object exception valueerror

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。我究竟做错了什么?

2 个答案:

答案 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类。