2009-09-26 3 views
3

Извините, я не мог описать свою проблему намного лучше в названии.Python - Одинаковая строка кода работает только во второй раз?

Я пытаюсь изучить Python и натолкнулся на это странное поведение и надеялся, что кто-то сможет объяснить это мне.

Я бегу Ubuntu 8.10 и питон 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> 

Я попробовал на другой машине, и если не подействует.

+2

Проблема заключается в том воспроизводимость на Python 2.6.2, Ubuntu 9,04 – jfs

+0

Не подтверждено на Snow Leopard, питон 2.4.6 установлен вручную. Однако интересная проблема. –

+0

Это работает в первый раз с использованием python 2.6.2, Ubuntu 9.04 –

ответ

4

minidom представляет собой модуль, так что вы должны нуждаться в

import xml.dom.minidom 
xml.dom.minidom.parseString("<xml><item/></xml>") 

Я не знаю, как вы получили второй parseString работать он не будет работать на моем питона, как в вашей другой машине

+0

Спасибо, да, мне нужен доступ к xml.dom.Node. *, Поэтому я хотел импортировать пакет с более высокого уровня. Я предполагаю, что это можно сделать так: import xml.dom import xml.dom.minidom .. это похоже на работу, я думаю, что нормально? – occhiso

0

Я не мог чтобы ваш код работал даже во второй попытке (используя Python 2.6.1 на Snow Leopard). :-) Однако, вот одна версия, которая действительно работает для меня:

>>> from xml.dom.minidom import parseString 
>>> parseString("<xml><item/></xml>") 
<xml.dom.minidom.Document instance at 0x100539830> 

Лично я предпочитаю этот стиль импорта. Он имеет тенденцию делать гораздо менее подробный код.

0

Я могу воспроизвести ваше поведение на Ubuntu 9.04 (python 2.6.2). Если вы делаете python -v, вы можете увидеть, как первая ошибка вызывает много дополнительного импорта. Поскольку это не происходит для всех, я могу только предположить, что Ubuntu/Debian добавили что-то в python для модулей автоматической загрузки.

Рекомендованное действие: import xml.dom.minidom.

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'>