The problem with that though is: I am not the one calling reload(). That is actually being called for me by web.py (or django, or some other framework, take your pick). More than that, I believe it's called (or caused, anyway) by something happening in WSGI under apache. (And I don't really want to start digging around in there either)
The patch in this case is very limited in scope, and all it inflicts on the subject code inside of decimal.Decimal.__new__(), is better programming practices. --jeff On Fri, Mar 2, 2012 at 5:49 PM, Ethan Furman <et...@stoneleaf.us> wrote: > Jeff Beardsley wrote: > >> HISTORY: >> In using python 2.7.2 for awhile on a web project (apache/wsgi web.py), I >> discovered a problem in using decimal.Decimal. A short search revealed >> that many other people have been having the problem as well, in their own >> apache/wsgi implementations (django, mostly), but I found no real solutions >> among the posts I read. So I did some experimentation of my own. >> >> The following code will break unexpectedly on standard python2.7 (and >> earlier) because of the way that isinstance fails after reload() (which is >> called by both of the above web frameworks). >> >> This is the error: TypeError("Cannot convert %r to Decimal" % value) >> >> THE TEST CODE >> >> import decimal >> from decimal import Decimal >> >> #this works >> Decimal(Decimal()) >> >> reload(decimal) >> >> #this fails before patching, but works fine afterwards >> Decimal(Decimal()) >> >> > Patching decimal.py to make it work with reload() is probably not going to > happen. > > What you should be doing is: > > import decimal > from decimal import Decimal > > reload(decimal) > Decimal = decimal.Decimal # (rebind 'Decimal' to the reloaded code) > > ~Ethan~ >
-- http://mail.python.org/mailman/listinfo/python-list