【发布时间】:2013-05-03 19:42:35
【问题描述】:
在设置对象的属性时,是否有一个经验法则可用于捕获错误?例如,假设您有一个 Shape 类,如下所示:
class Shape():
def __init__(self, size):
self.size = size
我可以做到以下几点:
>>> s = 形状(3)
>>> 尺寸
3
>>> s.size = "你好"
>>> 尺寸
'你好'
但是如果属性必须是数字呢?在这种情况下如何捕获 TypeErrors?我是否在 init 定义中添加了 try/except ?这是我的猜测:
class Shape():
def __init__(self, size):
try:
float(size)
self.size = size
except:
raise TypeError, "Value must be numeric"
这将在初始化时捕获错误,但在设置属性时不会。当用户尝试 s.size = "hello" 时如何捕获 TypeError?
谢谢!
我尝试实现以下答案,但没有奏效:
class Shape():
def __init(self, size):
self.size = size
@property
def size(self):
return self._size
@size.setter
def size(self, value):
self._size = float(value)
我收到以下错误消息:
Traceback(最近一次调用最后一次):文件“python_playground.py”,第 18 行,在
print s.size File "python_playground.py", line 9, in size return self._size AttributeError: Shape instance has no attribute '_size'
【问题讨论】:
-
你不需要在这里使用
try/except,因为float(shape)如果给定的值不能转换为浮点数,已经引发了一个完美的异常。 -
您的
__init__(self, size)看起来指定错误。
标签: python