オブジェクトの属性を設定する際にエラーをキャッチするために従うべき経験則はありますか? たとえば、次のような Shape クラスがあるとします。
class Shape():
def __init__(self, size):
self.size = size
私は次のことができます:
>>> s = シェイプ(3)
>>> Sサイズ
3
>>> s.size = "こんにちは"
>>> Sサイズ
'こんにちは'
しかし、属性が数値でなければならない場合はどうなるでしょうか? この状況で 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)
次のエラー メッセージが表示されます。
トレースバック (最新の呼び出しが最後): ファイル "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'