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

Diez B. Roggisch deets at web.de
Mo Nov 11 19:54:59 CET 2013


> 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:
> 
> 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?

http://docs.python.org/dev/whatsnew/3.2.html

Mal nach ResourceWarning gucken. Kannte ich auch noch nicht, coole idee.

> 
> "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 ;) )

Seit Python2.5 macht man das mittels des with-statements:

with open(…) as inf:
     content = inf.read()


Ein weiteres Stichwort ist dazu "contextmanager", und im Grunde geht es darum, resourcen innerhalb eines bestimmten scopes (also Codabschnitts) sicher zu allokieren und zu deallokieren - was auch immer das im einzelnen heisst. Funtktioniert zB auch bei Locks.

Diez

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20131111/88d55def/attachment.html>


Mehr Informationen über die Mailingliste python-de