On Thu, 21 Jun 2007 16:03:42 -0400, David Abrahams wrote: > I'm pretty comfortable with Python, but recently I'm constantly finding > mysterious issues with import. For example, looking at > > http://genshi.edgewall.org/browser/trunk/genshi/filters/transform.py > > the examples use the symbol 'HTML' but it's not defined locally, it's > not explicitly imported, and there's no import *. Yet doctest will test > this module and it passes with flying colors. It turns out HTML is > defined in genshi.input. How do I know that? I grepped for it. How > does it become available to this module?
There are ways to bypass the import system. The most obvious would be to write directly to globals. >>> spanish_inquisition Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'spanish_inquisition' is not defined >>> globals()['spanish_inquisition'] = "NOBODY expects the Spanish Inquisition!!!" >>> spanish_inquisition 'NOBODY expects the Spanish Inquisition!!!' > Another example: I was recently working on some code that did an import > from inside a class method. That import was failing. I moved the > import to the top of the file (at module scope) and it succeeded. I'm > fairly sure that nobody was monkeying around with sys.path in that case. > Can anyone think of a likely explanation? If it was a "from MODULE import *" then it will not work if it is nested in a function or class. That's by design. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list