/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28:ResourceWarning:未关闭的文件<_io.bufferedreader i =“ 4”>
返回concat([fileid中f的[self.open(f).read()])
这是我在调试模式下发现的警告。 我认为也许您想在下一个版本之前修复它。
嗨,我可以解决这个问题吗?
@iliaschalkidis @alvations如何在Linux上重现警告?
@ sks4903440使用版本3.2.5,您可以尝试在命令行中运行以下脚本:
test.py
import warnings
import nltk
warnings.filterwarnings('error', category=ResourceWarning)
stop_words = nltk.corpus.stopwords.words('english')
$ python test.py
您应该得到:
ResourceWarning: unclosed file <_io.BufferedReader name='/Users/kiddo/nltk_data/corpora/stopwords/english'>
在1945年修正
嗯..将io.BufferedReader
继承到StreamCorpusReader是一个有趣的解决方案,但也许可以使用上下文管理器with
作用域正确关闭文件,这可能是更好的解决方案。
而且我认为Python3.6对与以前版本不同的文件有一些特殊要求。 我们必须从CPython中读取更改日志,以确保我们所做的不只是创可贴=)
@alvations使用with
当然是个好主意。 我会尝试将其合并。 由于在CPython中,垃圾回收器在引用计数为零后会自动关闭文件,因此我没有使用过。 为了使with
语句正常工作,我们将不得不使用io.BufferedReader
或实现__enter__
和__exit__
方法。 您认为哪个更好?
〜我认为我们不必实现enter / exit方法,因为我们不会从BufferedReader继承,而是使用上下文打开和关闭,然后让io
模块处理gc(垃圾回收) )。〜
这很棘手, io.BufferedReader
已经具有seek()
like函数,并且当SeekableUnicodeStreamReader
从那里继承而没有做任何超级__init__()
,我不确定它从BufferedReader中获取的内容。
而实际上,我们真的不能包住with
内read()
,因为这会阻止寻求下班告诉函数,除非我们破解器内的缓冲with
环境。 嗯...
有什么消息吗? 在几乎所有资源上,Python 3.6仍然抱怨NLTK 3.3:
/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'>
修正建议: https :
似乎已经完成的另一个问题,最好关闭该问题。
感谢大家提出问题,并感谢@purificant解决问题!
最有用的评论
有什么消息吗? 在几乎所有资源上,Python 3.6仍然抱怨NLTK 3.3: