3 Stimmen

Python - Dieselbe Code-Zeile funktioniert nur beim zweiten Mal, wenn sie aufgerufen wird?

Tut mir leid, dass ich mein Problem im Titel nicht viel besser beschreiben konnte.

Ich versuche, Python zu lernen, und stieß auf dieses seltsame Verhalten und hoffte, dass jemand mir dies erklären könnte.

Ich benutze Ubuntu 8.10 und python 2.5.2

Zuerst importiere ich xml.dom
Dann erstelle ich eine Instanz eines Minidoms (unter Verwendung seines vollständig qaulifizierten Namens xml.dom.minidom)
Dies schlägt fehl, aber wenn ich dieselbe Zeile noch einmal ausführe, funktioniert es! Siehe unten:

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

Ich habe es auf einem anderen Rechner versucht, und es schlägt immer wieder fehl.

7voto

jfs Punkte 370717

Das Problem besteht darin apport_python_hook.apport_excepthook() Als Nebeneffekt importiert es xml.dom.minidom .

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

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

5voto

mmmmmm Punkte 31394

Minidom ist ein Modul, daher sollten Sie

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

Ich weiß nicht, wie Sie die zweite parseString bekommen, um es auf meinem Python wie in Ihrem anderen Rechner fehlschlägt arbeiten

0voto

Jason Baker Punkte 180981

Ich konnte Ihren Code auch beim zweiten Versuch nicht zum Laufen bringen (mit Python 2.6.1 auf Snow Leopard) :-) Hier ist jedoch eine Version, die bei mir funktioniert:

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

Ich persönlich bevorzuge diese Art der Einfuhr. Es neigt dazu, für viel weniger wortreichen Code zu machen.

0voto

Douglas Leeder Punkte 50423

Ich kann Ihr Verhalten auf Ubuntu 9.04 (Python 2.6.2) reproduzieren. Wenn Sie tun python -v können Sie sehen, dass der erste Fehler viele zusätzliche Importe verursacht. Da es nicht bei jedem passiert, kann ich nur annehmen, dass Ubuntu/Debian etwas zu Python hinzugefügt haben, um Module automatisch zu laden.

Die empfohlene Maßnahme ist nach wie vor import xml.dom.minidom .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X