At 05:57 PM 8/29/2006 -0700, Raymond Hettinger wrote: >Phillip J. Eby wrote: > >>At 05:20 PM 8/29/2006 -0700, Raymond Hettinger wrote: >> >>>* The implementation's doc string examples were not tested and don't >>>work (this is a deep error). One reads: >>> >>> with decimal.getcontext() as ctx: >>> ctx.prec += 2 >>> s = ... >>> return +s >>> >>> >>>To get this to work with the current implementation, it should read >>> >>> with decimal.getcontext().copy().get_manager() as ctx: >>> ctx.prec += 2 >>> s = ... >>> return +s >>> >>>This is horrid. Please either revert the patch or fix it to match PEP-343. >> >> >>Actually, as I read the code, that would be: >> >> with decimal.getcontext().get_manager() as ctx: > >Given the current mis-implementation, the copy() step is absolutely >necessary. Since context objects are mutable, the current context would >never get it precision and flags restored. > >Try running the example and printing out the current context precision >before and after the with-suite. You'll see that the context has changed >(which defeats the whole purpose).
No need; now that you've explained the problem I see why the code is wrong. This is definitely a bug in the decimal module. It looks like the code is correct at first glance, but the .copy() definitely needs to be in the ContextManager class, not the get_manager() method. Yuck. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com