/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: ملف غير مغلق <_io.bufferedreader i = "4">
إرجاع concat ([self.open (f) .read () لـ f في fileids])
هذا تحذير وجدته في وضع التصحيح. اعتقدت أنك ربما ترغب في إصلاح ذلك قبل الإصدار التالي.
مرحبًا ، هل يمكنني معالجة هذه المشكلة؟
iliaschalkidisalvations كيف يمكنني إعادة إنتاج التحذير على نظام التشغيل 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__
. ماذا تعتقده بأنه الأفضل؟
~ أعتقد أننا لسنا مضطرين إلى تنفيذ طرق الإدخال / الخروج لأننا لن نرث من BufferedReader ولكننا نستخدم السياق للفتح والإغلاق ثم نترك وحدة io
تتعامل مع gc (جمع القمامة ). ~
هذا أمر صعب ، حيث أن io.BufferedReader
يحتوي بالفعل على وظيفة seek()
مثل ، وعندما يرث 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://github.com/nltk/nltk/pull/2165
هناك مشكلة أخرى يبدو أنها قد اكتملت ، فقد يكون من الجيد إغلاق المشكلة.
شكرًا للجميع على إثارة المشكلة و purificant للإصلاح !
التعليق الأكثر فائدة
أي أخبار عن هذا؟ لا يزال Python 3.6 يشكو من NLTK 3.3 ، على كل مورد تقريبًا: