/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: file tidak tertutup <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () untuk f dalam fileids])
Itu peringatan yang saya temukan pada mode debugging. Saya pikir mungkin Anda ingin memperbaikinya sebelum rilis berikutnya.
Hai, bolehkah saya mengatasi masalah ini?
@iliaschalkidis @alvations Bagaimana cara mereproduksi peringatan di linux?
@ sks4903440 Menggunakan versi 3.2.5, Anda dapat mencoba menjalankan skrip berikut pada baris perintah Anda:
test.py
import warnings
import nltk
warnings.filterwarnings('error', category=ResourceWarning)
stop_words = nltk.corpus.stopwords.words('english')
$ python test.py
Anda harus mendapatkan:
ResourceWarning: unclosed file <_io.BufferedReader name='/Users/kiddo/nltk_data/corpora/stopwords/english'>
Diperbaiki di # 1945
Hmmm .. Mewarisi io.BufferedReader
ke StreamCorpusReader adalah solusi yang menarik tetapi mungkin menutup file dengan benar dengan manajer konteks with
scope mungkin merupakan perbaikan yang lebih baik.
Dan menurut saya Python3.6 memiliki beberapa persyaratan khusus untuk file yang berbeda dari versi sebelumnya. Kita harus membaca log perubahan dari CPython untuk memastikan apa yang kita lakukan bukan hanya bandaid =)
@alvations Menggunakan with
pasti merupakan ide yang bagus. Saya akan mencoba memasukkan itu. Karena di CPython, pengumpul sampah secara otomatis menutup file setelah jumlah referensi nol, saya tidak menggunakannya. Juga agar pernyataan with
berfungsi, kita harus menggunakan io.BufferedReader
atau menerapkan metode __enter__
dan __exit__
. Menurut Anda apa yang lebih baik?
~ Saya pikir kita tidak perlu menerapkan metode masuk / keluar karena kita tidak akan mewarisi dari BufferedReader tetapi menggunakan konteks untuk membuka dan menutup dan kemudian membiarkan menangani modul io
menangani gc (pengumpulan sampah ). ~
Ini rumit, io.BufferedReader
sudah memiliki fungsi suka seek()
dan ketika SeekableUnicodeStreamReader
mewarisi darinya tanpa melakukan super __init__()
, saya tidak begitu yakin apa yang diambil dari BufferedReader.
Dan sebenarnya, kita tidak bisa benar-benar membungkus with
di dalam read()
karena itu akan mencegah fungsi mencari dan memberitahu dari pekerjaan kecuali kita meretas buffer dalam konteks with
. Hmm ...
Ada berita tentang ini? Python 3.6 masih mengeluh tentang NLTK 3.3, pada hampir semua sumber daya:
/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'>
Perbaikan yang diusulkan: https://github.com/nltk/nltk/pull/2165
Masalah lain yang tampaknya telah diselesaikan, mungkin ada baiknya untuk menutup masalah tersebut.
Terima kasih semuanya telah mengangkat masalah ini dan @purificant atas perbaikannya!
Komentar yang paling membantu
Ada berita tentang ini? Python 3.6 masih mengeluh tentang NLTK 3.3, pada hampir semua sumber daya: