[Python-de] Python3.3 - Unittest - Warnung
Stefan Schwarzer
sschwarzer at sschwarzer.net
Mo Nov 11 20:04:09 CET 2013
Hi Stefan,
On 2013-11-11 19:12, stefan at schweter.it wrote:
> ich habe folgenden Unittest einmal ausprobiert:
>
> import unittest
>
> class TestMorphologyFunctions(unittest.TestCase):
>
> def test_save_most_seen_prefix_suffix_for_tokens(self):
> file_content = open('temp_test.txt').read()
> self.assertTrue(not not not not True)
>
> unittest.main()
>
> Leider (?) bekomme ich folgende Warnung nach der Ausführung:
lass das "leider" ruhig weg. Die Meldung ist normalerweise
durchaus sinnvoll. :-)
> test.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='temp_test.txt' mode='r' encoding='UTF-8'>
> file_content = open('temp_test.txt').read()
>
> Weiß jemand zufällig, wieso diese Warnung nur erscheint,
> wenn ich diese Codezeile im Unittest drinnen habe?
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.
> "Umgehen" kann ich das ganze ja mit:
>
> f = open('temp_test.txt')
> content = f.read()
> ...
> f.close()
>
> oder gibt es da noch eine andere Möglichkeit? Ich benutze
> Python3.3 (die, welche gerade bei Arch zur Verfügung steht
> ;) )
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.
Viele Grüße
Stefan
Mehr Informationen über die Mailingliste python-de