抱歉,我无法在标题中更好地描述我的问题。
我正在尝试学习Python,并遇到了这种奇怪的行为,希望有人可以向我解释这一点。
我正在运行Ubuntu 8.10和python 2.5.2
首先我导入xml.dom
然后我创建一个minidom的实例(使用其完全qaulified名称xml.dom.minidom)
这失败了,但如果我再次运行同一行,它就可以了!
见下文:
$> python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:29:17)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import xml.dom
>>> xml.dom.minidom.parseString("<xml><item/></xml>")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'minidom'
>>> xml.dom.minidom.parseString("<xml><item/></xml>")
<xml.dom.minidom.Document instance at 0x7fd914e42fc8>
我试过另一台机器,如果一直都失败了。
答案 0 :(得分:7)
问题在于apport_python_hook.apport_excepthook()
,因为它会导致xml.dom.minidom
的副作用。
没有apport_except_hook
:
>>> import sys
>>> sys.excepthook = sys.__excepthook__
>>> import xml.dom
>>> xml.dom.minidom
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'minidom'
>>> xml.dom.minidom
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'minidom'
>>>
使用apport_except_hook
:
>>> import apport_python_hook
>>> apport_python_hook.install()
>>> xml.dom.minidom
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'minidom'
>>> xml.dom.minidom
<module 'xml.dom.minidom' from '../lib/python2.6/xml/dom/minidom.pyc'>
答案 1 :(得分:4)
minidom是一个模块,所以你需要
import xml.dom.minidom
xml.dom.minidom.parseString("<xml><item/></xml>")
我不知道你是如何让第二个parseString工作的,它在我的python上失败,就像在你的其他机器上一样
答案 2 :(得分:0)
即使是第二次尝试(在Snow Leopard上使用Python 2.6.1),我也无法让你的代码工作。 :-)然而,这是一个适合我的版本:
>>> from xml.dom.minidom import parseString
>>> parseString("<xml><item/></xml>")
<xml.dom.minidom.Document instance at 0x100539830>
就个人而言,我更喜欢这种导入方式。它往往会减少冗长的代码。
答案 3 :(得分:0)
我可以在Ubuntu 9.04(python 2.6.2)上复制你的行为。如果执行python -v
,您可以看到第一个错误导致大量额外导入。因为它并不是每个人都能实现的,所以我只能假设Ubuntu / Debian已经为python添加了一些内容来自动加载模块。
建议的操作仍然是import xml.dom.minidom
。