/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: nicht geschlossene Datei <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () für f in fileids])
Das ist eine Warnung, die ich im Debugging-Modus gefunden habe. Ich dachte, dass Sie das vielleicht vor der nächsten Veröffentlichung beheben möchten.
Hallo, kann ich dieses Problem annehmen?
@iliaschalkidis @alvations Wie kann ich die Warnung unter Linux reproduzieren?
@ sks4903440 Mit Version 3.2.5 können Sie versuchen, das folgende Skript in Ihrer Befehlszeile auszuführen:
test.py
import warnings
import nltk
warnings.filterwarnings('error', category=ResourceWarning)
stop_words = nltk.corpus.stopwords.words('english')
$ python test.py
Du solltest bekommen:
ResourceWarning: unclosed file <_io.BufferedReader name='/Users/kiddo/nltk_data/corpora/stopwords/english'>
In # 1945 behoben
Hmmm .. Das Erben von io.BufferedReader
an den StreamCorpusReader ist eine interessante Lösung, aber möglicherweise ist das Schließen der Datei mit Kontextmanagern with
eine bessere Lösung.
Und ich denke, Python3.6 hat einige spezielle Anforderungen für Dateien, die sich von früheren Versionen unterscheiden. Wir müssen das Änderungsprotokoll von CPython lesen, um sicherzugehen, dass wir nicht nur ein Bandaid sind =)
@alvations Die Verwendung von with
wäre sicherlich eine gute Idee. Ich würde versuchen, das zu berücksichtigen. Da in CPython der Garbage Collector die Datei nach null Referenzzählungen automatisch schließt, hatte ich das nicht verwendet. Damit die Anweisung with
funktioniert, müssen wir die Methoden io.BufferedReader
oder die Methoden __enter__
und __exit__
implementieren. Was denkst du ist besser?
~ Ich denke, wir müssen die Enter / Exit-Methoden nicht implementieren, da wir nicht vom BufferedReader erben, sondern den Kontext zum Öffnen und Schließen verwenden und dann das Modul io
die gc (Garbage Collection) behandeln lassen ). ~
Dies ist schwierig, das io.BufferedReader
bereits die seek()
-ähnliche Funktion, und wenn SeekableUnicodeStreamReader
erbt, ohne Super __init__()
zu tun, bin ich mir nicht ganz sicher was es von BufferedReader nimmt.
Und tatsächlich können wir die with
nicht wirklich in die read()
einwickeln, da dies verhindert, dass Such- und Tell-Funktionen funktionieren, es sei denn, wir hacken den Puffer im with
-Kontext. Hmm ...
Gibt es Neuigkeiten zu diesem Thema? Python 3.6 beschwert sich immer noch über NLTK 3.3 auf so ziemlich jeder Ressource:
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1107: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/lexnames'>
for i, line in enumerate(self.open('lexnames')):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adj'>
for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adv'>
for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.noun'>
for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.verb'>
for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adj.exc'>
for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adv.exc'>
for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/noun.exc'>
for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/verb.exc'>
Vorgeschlagene Lösung: https://github.com/nltk/nltk/pull/2165
Ein weiteres Problem, das anscheinend abgeschlossen wurde, ist möglicherweise sinnvoll, um das Problem zu schließen.
Vielen Dank an alle, die das Problem angesprochen haben, und an
Hilfreichster Kommentar
Gibt es Neuigkeiten zu diesem Thema? Python 3.6 beschwert sich immer noch über NLTK 3.3 auf so ziemlich jeder Ressource: