[Python-de] Python3.3 - Unittest - Warnung

Peter Otten __peter__ at web.de
Di Nov 12 12:13:59 CET 2013


Stefan wrote:

>> Per Default sind die `ResourceWarning`s beim Starten von
>> `python3` nicht aktiv, aber sie können von Test-Frameworks
>> aktiviert werden. Das ist das, was du siehst.
>> 
> 
> Hallo Stefan,
> 
> danke für den Hinweis! Ich habe mir die entsprechende Python Dokuseite
> über Warnungen angesehen, da wurde das erwähnt.
> 
>> 
>> Die idiomatische und zuverlässigere Variante ist
>> 
>>  with open(temp_test.txt) as f:
>>      content = f.read()
>> 
>> Am Ende der `with`-Anweisung (Ausrückung) wird die Datei -
>> auch bei einer Exception beim Lesen - geschlossen.
>> 
>> Die `ResourceWarning` bekommst du übrigens, weil es von der
>> Python-Implementierung abhängt, wann die Datei geschlossen
>> wird, wenn du es nicht explizit tust. Das heißt, du solltest
>> dich _nicht_ darauf verlassen, dass eine Datei geschlossen
>> wird, sobald du die Funktion/Methode verlässt.
>> 
> 
> Danke für die Erklärungen! Ich hab das jetzt überall in meinem Code
> verwendet.
> 
> Ich habe allerdings noch eine Frage zu diesen ResourceWarnings - diesmal
> aber im Zusammenhang mit NLTK:
> 
> from nltk.corpus import brown
> 
> counter = 0
> 
> for word in brown.words():
> counter += 1
> 
> print(counter)
> 
> 
> Wenn ich das mit python3.3 -Wd starte, kommt wieder diese
> "ResourceWarning: unclosed file" Warnung.
> 
> Als "Workaround" um die Meldung wegzubekommen, verwende ich aktuell das
> hier:
> 
> brown_words = brown.words()
> 
> 
> Geht das noch eleganter?

I rate dir, dich nicht um die Warnung zu kümmern.

Insbesondere solltest du eigenen Code nicht solange per try-and-error 
verbiegen, bis die von Bibliothekscode verursachten Warnungen -- die in der 
Regel harmlos sind -- verschwinden.

Was möglicherweise sinnvoll ist -- einen Bug-Report, am besten mit Patch, an 
das Projekt zu geben.

Ich habe nur ein unter Python 2.7 laufendes nltk 2.0b9 auf dem Rechner. Wenn 
sich in der Zwischenzeit nichts geändert hat, ist der inkriminierte open()-
call wohl in nltk.corpus.reader.tagged.TaggedCorpusReader.raw().

-- 
"Flat is better than nested." 
The Zen of Python, by Tim Peters



Mehr Informationen über die Mailingliste python-de