بيثون الموارد غير المغلقة:هل من الآمن حذف الملف؟

StackOverflow https://stackoverflow.com//questions/21057942

  •  22-12-2019
  •  | 
  •  

سؤال

بحثت في Google عن هذه المشكلة، لكن لم أجد أي حلول.أقوم بتشغيل Python 3.3 مع البرنامج الإضافي Eclipse وPyDev، وعندما أقوم بتشغيل أي مشروع Python، أحصل على الرسالة التالية:

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/update_checker.py:37: ResourceWarning: unclosed file <_io.BufferedReader name='/var/folders/x4/st67yr0x6qg7znh7sdfr94kh0000gn/T/update_checker_cache.pkl'>
  permacache = pickle.load(open(filename, 'rb'))

أنا جديد على لغة بايثون، وليس لدي أي فكرة عما يعنيه هذا.أردت أن أسأل قبل حذف هذا للتأكد من أن الحذف آمن.ماذا يعني هذا حتى؟أعلم أن هناك ملف مفتوح...ولكن لماذا تشتكي بايثون لي؟أنا أستخدم مكتبة PRAW، إذا كان ذلك يحدث أي فرق.

تحديث:الكود الخاص بي هو هنا على سورسفورج, لكنه لا يظهر الخطأ بشكل موثوق (تم تجربته على جهازي كمبيوتر مختلفين).بمجرد ظهور الخطأ، فإنه لا يختفي أبدًا.

هل كانت مفيدة؟

المحلول

يعني تحذير الموارد هذا أنك فتحت ملفًا واستخدمته ثم نسيت ذلك يغلق الملف.تقوم بايثون بإغلاقه لك عندما تلاحظ أن كائن الملف قد مات، ولكن هذا لا يحدث إلا بعد انقضاء بعض الوقت غير المعروف.وهكذا، في الإصدارات الأخيرة، تطبع بايثون أيضًا تحذيرًا للموارد عندما تفعل ذلك.إنها طريقة يمكنك من خلالها التعرف بسرعة على مكان وجود الملفات غير المغلقة وإغلاقها بشكل صحيح.قد يكون ذلك مهمًا في بعض الأنظمة الأساسية التي لا يمكن أن تحتوي على أكثر من N من الملفات المفتوحة في نفس الوقت (على سبيل المثال.1024).وأيضًا، على وجه التحديد في نظام التشغيل Windows، لا يمكنك إجراء بعض العمليات على ملف إذا كان لا يزال مفتوحًا (على سبيل المثال.حذفه).

في هذه الحالة، السطر في الملف update_checker.py لا بد من التثبيت ليقول:

with open(filename, 'rb') as f:   # will close() when we leave this block
    permacache = pickle.load(f)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top