On Wed, May 11, 2016 at 7:52 PM, <martin...@gmail.com> wrote: > In other words, I get different results for the same expression (2/3) in the > program and on the pdb prompt, which makes debugging tricky. I cannot figure > out how to persuade pdb to actually load the division module. Is there an > approved way? Normal modules load as expected in pdb: > > (Pdb) import os > (Pdb) os.getcwd() > '/home/martin' > > so this is obviously some special magic that applies only to the __future__ > module. Any ideas?
You're right that future directives have special magic. I don't know how to trigger that magic with pdb, but it doesn't surprise me that it doesn't acknowledge future directives in the file you're debugging (there could be multiple files - future directives apply only to that one module). Worst case, you should be able to hack it in like this: # pdb_future.py def futurize(*directives): import __future__ flags = 0 for directive in directives: flags |= getattr(__future__, directive).compiler_flag orig_compile = compile # Snapshot for closure def compile_future(source, filename, mode): return orig_compile(source, filename, mode, flags) return compile_future import pdb pdb.compile = futurize('print_function', 'division', 'absolute_import') pdb.main() I doubt that Python 2.7's pdb will grow a feature like this, but you could propose it for 3.6 and see if anyone supports backporting it. Otherwise, injecting a wrapper will work, but it ain't pretty. ChrisA -- https://mail.python.org/mailman/listinfo/python-list