Seite 1 von 1

ElementTree und Exceptions

Verfasst: Freitag 2. November 2007, 14:15
von ws
Hallo,

für ein Projekt benutze ich ElementTree, um kleinere XML-Dateien einzulesen. Über Unittests wird ausserdem geprüft, wie die entsprechende Applikation mit ungültigen XML-Dateien umgeht. Leider schlägt das Abräumen
fehl, wenn man ElementTree.parse() eine ungültige Datei übergibt; anscheinend gibt der Parser das dazugehörige Filehandle nicht zurück (Python 2.5, Windows XP, ElementTree 1.2.6). Ich erhalte folgenden Fehler

WindowsError: [Error 32] Der Prozess kann nicht auf die Datei zugreifen, da sie
von einem anderen Prozess verwendet wird: 'bla'

Das Problem lässt sich mit dem unten wiedergegebenen Code reproduzieren. Scheint zunächst mal ein Fehler in ElementTree zu sein, oder? Fällt jemand ein Workaround ein?

Thanx in advance

Wolfgang

Code: Alles auswählen

import os
from xml.etree import ElementTree

f = open("bla", "w")
f.write("")
f.close()
parsed = ElementTree.parse("bla")
os.remove("bla")

Verfasst: Freitag 2. November 2007, 15:02
von Y0Gi
Da ``parse`` und andere Teile der API alternativ zu einem Dateinamen auch ein Dateihandle akzeptieren, sollte dieses helfen:

Code: Alles auswählen

from __future__ import with_statement
import os
from xml.etree import ElementTree


with open("bla", "w") as f:
    f.write("")

with open("bla", "r") as f:
    parsed = ElementTree.parse(f)

os.remove("bla")

Verfasst: Freitag 2. November 2007, 15:06
von midan23
Also, wenn ich mir das kurz anschaue:

1) In dem Code wird die Datei erstellt, eingelesen und gelöscht ...
2) Laut der Fehlermeldung wird die Datei zusätzlich von einem anderen Prozess verwendet ...

Bei mir funktioniert der Code jedenfalls ...
(Ich musste nur eine Zeile Ändern ... Leere Dateien sind keine XML-Dateien ...)

Verfasst: Freitag 2. November 2007, 15:30
von BlackJack
Falls Du die `f.write()`-Zeile geändert hast: Die hat *absichtlich* eine ungültige XML-Datei erzeugt! Das soll so sein!

Verfasst: Freitag 2. November 2007, 15:58
von Y0Gi
Es geht darum, dass ET bei einer ungültigen Datei das Handle wohl nicht geschlossen zu haben scheint.

Verfasst: Freitag 2. November 2007, 16:52
von ws
Hi,

vielen Dank für Eure Antworten, insbesondere der Tipp, dass ich parse auch direkt einen Filehandle statt eines Dateinamens übergeben kann, sollte mein Problem lösen.

Gruss
Wolfgang