在設置對象的屬性時是否遵循經驗法則來捕捉錯誤?比方說,例如,你有一個Shape類,如下所示:嘗試設置屬性時發生錯誤
class Shape():
def __init__(self, size):
self.size = size
我可以做到以下幾點:
>>> s = Shape(3)
>>> s.size
3
>>> s.size = "hello"
>>> s.size
'hello'
但是,如果屬性必須是數字呢?在這種情況下如何捕獲TypeErrors?我是否試過/除了init定義?這是我的猜測:
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 (most recent call last): File "python_playground.py", line 18, in
print s.size File "python_playground.py", line 9, in size return self._size AttributeError: Shape instance has no attribute '_size'
你並不需要使用'嘗試/ except'這裏,因爲'浮動(形狀)'如果給定的值不能被轉換爲浮點型,就已經引發了一個非常強烈的異常。 – kindall 2013-05-03 19:45:43
您的'__init __(self,size)'看起來不正確。 – pcurry 2013-05-03 20:22:15