On Thursday 17 November 2016 02:22, eryk sun wrote: > On Wed, Nov 16, 2016 at 8:39 AM, Steven D'Aprano > <steve+comp.lang.pyt...@pearwood.info> wrote: >> On Wednesday 16 November 2016 16:21, Veek M wrote: >> >>> Trying to make sense of that article. My understanding of debug was >>> simple: >>> 1. __debug__ is always True, unless -O or -OO >>> 2. 'if' is optimized out when True and the expr is inlined. >>> >>> So what does he mean by: >>> >>> 1. 'If you rebind __debug__, it can cause symptoms' >> >> What he means is, "I didn't test this code before running it, and I am >> wrong." >> >> You cannot rebind __debug__. >> >>>>> __debug__ = False >> File "<stdin>", line 1 >> SyntaxError: can not assign to __debug__ >> >> >> (That's Python 2.5 or better, and maybe even older than that.) > > Andrew didn't assign directly to __debug__. He assigned to > sys.modules[__name__].__debug__, which is allowed prior to 2.7. Even > in later versions, as he pointed out, you can dynamically assign to > '__debug__' in a namespace dict.
That's a fascinating loophole. In any case, that's not something people are likely to stumble onto by accident, and if you're intentionally writing to a reserved name in a non- standard way, whatever side-effects you trip over are your own fault. > >>> if not __debug__: print('not __debug__') > ... > not __debug__ That should be a candidate for keyhole optimization, same as `if __debug__`. -- Steven 299792.458 km/s — not just a good idea, it’s the law! -- https://mail.python.org/mailman/listinfo/python-list