Bug in handling of single underscore identifiers?

Robert Brewer fumanchu at amor.org
Tue Jan 4 18:34:25 EST 2005


Tom Blackwell wrote:
> Today I installed the 'mechanoid' package from sourceforge, but the
> self-test failed. On looking into it, I noticed odd behaviour in the
> handling of single underscore module names.  Importing into the
> current namespace with 'from' seems to work, but accessing members of
> the imported module only works if the imported name is qualified by
> the  containing module name.
> 
> For example:
> >>> from mechanoid import _mechanoid_Common
> >>> from _mechanoid_Common import Common
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> ImportError: No module named _mechanoid_Common
> >>> from mechanoid._mechanoid_Common import Common
> **succeeds**
> >>> _mechanoid_Common
> <module 'mechanoid._mechanoid_Common' from
> 'mechanoid\_mechanoid_Common.pyc'>
> 
> Is this a bug or a feature? The language reference section 2.3.2
> 'Reserved classes of identifiers' indicates that identifiers starting
> with a single underscore are not imported by "from module import *".
> However I can't find any indication that "from module import _name"
> should work this way.

I don't think this has anything to do with the underscore. The import
statement doesn't reference module globals; instead, it uses its own
mechanism to find the module you specify:

>>> from os import path
>>> path.sys
<module 'sys' (built-in)>
>>> from path import sys
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
ImportError: No module named path

In your example ("from _mechanoid_Common import Common"), import can't
find any module named "_mechanoid_Common" in site-packages, PYTHONPATH,
or other known sources.


Robert Brewer
MIS
Amor Ministries
fumanchu at amor.org



More information about the Python-list mailing list