我无法使用Python 3.4.3理解以下行为:
In [1]: import urllib
In [3]: urllib.parse
Out[3]: <module 'urllib.parse' from '/home/laurent/anaconda/envs/springleaf/lib/python3.4/urllib/parse.py'>
In [4]: urllib.request
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-615cd424e6d8> in <module>()
----> 1 urllib.request
AttributeError: 'module' object has no attribute 'request'
我查看了[myenv]/lib/python3.4/urllib
中的urllib包,但它只有一个空的__init__.py
,我无法弄清楚parse
子模块在{{request
子模块可见的原因1}}或error
子模块不是。
我期待的行为是让所有模块都可见。
导致parse
模块可见而其他模块不可见的原因是什么?
我可以使用from urllib import request
就好了,但我想了解行为的原因。
修改 根据评论中的建议,我在一个普通的python shell中运行了相同的命令(我之前使用的是IPython 4.0.0):
>>> import urllib
>>> urllib.parse
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'parse'
>>> urllib.request
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'request'
行为确实不同。这对我来说更有意义,因为所有子模块都表现出相同的行为。
如果有人能解释IPython特定行为的来源,我会很高兴。)。