有人知道为什么ValueErrorException没有显示吗?

2024-10-03 09:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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=银行账户(-10)

打印(x.balance)

应该打印错误,但它打印-10。我做错了什么


Tags: selfifobjectinitdefexceptionpasselse
2条回答

init中,您将值-10分配给self.balance,您永远不会调用balance()方法。您可能需要使用属性和setter。这样,每次为天平分配值时,都会执行检查:

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中的内置异常,您不需要自己的异常类

您为此BankAccount类定义了属性.balance和方法.balance()。因为它们具有相同的名称,所以一个将覆盖另一个。确保它们有单独的名称,例如:

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())

这将引发所需的异常

相关问题 更多 >