Hi there.

I asked a question 
<http://stackoverflow.com/questions/41845671/import-as-in-python-3> on 
Stackoverflow:

(Pdb) import brain.utils.mail
(Pdb) import brain.utils.mail as mail_utils
*** AttributeError: module 'brain.utils' has no attribute 'mail'
I always thought that import a.b.c as m is roughly equivalent to m = 
sys.modules['a.b.c']. Why AttributeError? Python 3.6

I was pointed out <http://stackoverflow.com/a/24968941/248296> that this is a 
somewhat weird behavior of Python:

The statement is not quite true, as evidenced by the corner case you met, 
namely if the required modules already exist in sys.modules but are yet 
uninitialized. The import ... as requires that the module foo.bar is injected 
in foo namespace as the attribute bar, in addition to being in sys.modules, 
whereas the from ... import ... as looks for foo.bar in sys.modules.

Why would `import a.b.c` work when `a.b.c` is not yet fully imported, but 
`import a.b.c as my_c` would not? I though it would be vice versa.

Using `import a.b.c as my_c` allows avoiding a number of circular import 
issues. Right now I have to use `from a.b import c as my_c` as a workaround, 
but this doesn't look right.

Does this make sense? Is there an issue in the Python bug tracker for this? 
Can/should I create one?


Victor
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to