A possible change to decimal.Decimal?

Jeff Beardsley jbeard565 at gmail.com
Fri Mar 2 19:18:29 EST 2012


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 <ethan at 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~
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20120302/13457e33/attachment-0001.html>


More information about the Python-list mailing list