On Oct 17, 3:20 pm, Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote: > On Wed, 17 Oct 2007 05:57:50 -0700, Paul Melis wrote: > > On Oct 17, 2:39 pm, Duncan Booth <[EMAIL PROTECTED]> wrote: > >> >>> class C(object): > > >> def setx(self, value): > >> if len(value)>2: > >> raise ValueError > >> self._x = value > >> def getx(self): > >> return self._x > >> x = property(getx, setx) > > >> >>> o = C() > >> >>> o.x = [] > >> >>> o.x += ['a'] > >> >>> o.x += ['b'] > >> >>> o.x += ['c'] > > >> Traceback (most recent call last): > >> File "<pyshell#27>", line 1, in <module> > >> o.x += ['c'] > >> File "<pyshell#22>", line 4, in setx > >> raise ValueError > >> ValueError > > >> >>> o.x > >> ['a', 'b', 'c'] > > > Now that's really interesting. I added a print "before" and print > > "after" statement just before and after the self._x = value and these > > *do not get called* after the exception is raised when the third > > element is added. > > Well, of course not. Did you really expect that!? Why?
Because o.x *is* updated, i.e. the net result of self._x = value is executed. Paul -- http://mail.python.org/mailman/listinfo/python-list