【发布时间】:2016-01-17 08:02:21
【问题描述】:
我在 python 3.4.2 中观察到以下行为,我无法解释。希望有人能对此事有所了解:
在 IPython 中:
In [129]: import urllib
In [130]: print(urllib.parse)
<module 'urllib.parse' from '/Users/ashwin/.pyenv/versions/3.4.2/lib/python3.4/urllib/parse.py'>
我已经导入了一个模块,并打印了它的一个属性。一切都按预期工作。到目前为止,生活是美好的。
现在,我从命令行做同样的事情:
$ python -c 'import urllib; print(urllib.parse)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'parse'
说什么?!这不是应该的工作方式。
好的,也许这是 python 范围的行为;使用 -c 标志时,可能不会立即导入模块。让我们尝试另一个模块:
$ python -c 'import datetime; print(datetime.datetime)'
<class 'datetime.datetime'>
什么?!它对datetime 而不是urllib 是如何工作的?我在两个地方都使用相同版本的 python (3.4.2)
有人对此有什么想法吗?
编辑:
每一个 cmets:
$ which -a ipython
/Users/ashwin/.pyenv/shims/ipython
/Library/Frameworks/Python.framework/Versions/2.7/bin/ipython
/usr/local/bin/ipython
/usr/local/bin/ipython
和
$ which -a python
/Users/ashwin/.pyenv/shims/python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
/usr/bin/python
/usr/bin/python
【问题讨论】:
-
你可能想要添加
which -a ipython和which -a python的输出 -
@cel:我不明白这会有什么帮助,但我已经添加了它
-
所以
python -m IPython -c 'import datetime; print(datetime.datetime)'和python -c 'import datetime; print(datetime.datetime)'给出不同的结果? -
没有。
python -c和datetime给出的结果与python -c和urllib不同,前者会抛出AttributeError而后者不会。然而,urllib的代码在交互式 IPython 中使用时不会引发错误 -
基本上
python -c 'import urllib; print(urllib.parse)'和python -m IPython -c 'import urllib; print(urllib.parse)'给出不同的结果。我也看到了。确实是一个非常有趣的观察。我会添加一个常规的 python 标签来增加可见性。
标签: python command-line ipython python-3.4 attributeerror