Python - 相同的代码行仅在第二次调用时才起作用?

时间:2009-09-26 13:49:42

标签: python

抱歉,我无法在标题中更好地描述我的问题。

我正在尝试学习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>

我试过另一台机器,如果一直都失败了。

4 个答案:

答案 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