为啥没有显示 ValueError 异常?
Posted
技术标签:
【中文标题】为啥没有显示 ValueError 异常?【英文标题】:Does anyone know why the ValueErrorException is not showing?有谁知道为什么没有显示 ValueError 异常? 【发布时间】:2020-03-08 13:22:24 【问题描述】: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)
print(x.balance)
应该打印错误,但它打印 -10。我究竟做错了什么?
【问题讨论】:
【参考方案1】:您为此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())
这应该引发所需的异常。
【讨论】:
【参考方案2】:在 init 中,您将值 -10 分配给 self.balance,您从不调用方法 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 类。
【讨论】:
以上是关于为啥没有显示 ValueError 异常?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有字符串解析的情况下解析 Python 中的 ValueError?