تقنية

chdir في بايثون: إلى أي دليل نعود بعد الخطأ الداخلي؟

contextlib.chdir; start:initial cwd; with chdir(a); with chdir(b); RuntimeError; inner exit; cwd:a; outer exit; cwd:start
خطأ داخلي.

chdir الداخلية تعيد دليل الخارجية رغم الخطأ في تجربتنا. [1] [2]

الخلاصة السريعة

إلى a أولًا، ثم start بعد الخارجية. [1] [2]

  • chdir الداخلية تعيد دليل الخارجية رغم الخطأ في تجربتنا. [1] [2]
  • على CPython 3.12.14، نفترض a,b,c,d كائنات Path لمسارات مطلقة مختلفة لأربعة مجلدات مؤقتة موجودة؛ start دليل البداية. [1] [2]
  • داخل chdir(a)، نرفع RuntimeError داخل كتلة chdir(b)؛ تعمل except في a، وبعد الخارجية نعود إلى start. [1] [2]
  • الدخول يحفظ دليل العمل؛ __exit__ تستعيده ولا تكتم خطأنا. [1] [2]
  • تحكم: c ثم d بلا خطأ؛ نعود إلى c ثم start أيضًا. التغيير عالمي؛ تنفيذ متسلسل بلا خيوط أو yield. [1] [2]

الرجوع

chdir الداخلية تعيد دليل الخارجية رغم الخطأ في تجربتنا. [1] [2]

مسارات المثال

على CPython 3.12.14، نفترض a,b,c,d كائنات Path لمسارات مطلقة مختلفة لأربعة مجلدات مؤقتة موجودة؛ start دليل البداية. [1] [2]

التداخل

داخل chdir(a)، نرفع RuntimeError داخل كتلة chdir(b)؛ تعمل except في a، وبعد الخارجية نعود إلى start. [1] [2]

from contextlib import chdir from pathlib import Path start=Path.cwd() with chdir(a): try: with chdir(b):raise RuntimeError("own") except RuntimeError:print(Path.cwd()==a) print(Path.cwd()==start) [1] [2]

contextlib.chdir; start:initial cwd; with chdir(c); with chdir(d); normal exit; cwd:c; outer exit; cwd:start
خروج عادي.

تحكم

الدخول يحفظ دليل العمل؛ __exit__ تستعيده ولا تكتم خطأنا. [1] [2]

with chdir(c): with chdir(d):pass print(Path.cwd()==c) print(Path.cwd()==start) [1] [2]

تحكم: c ثم d بلا خطأ؛ نعود إلى c ثم start أيضًا. التغيير عالمي؛ تنفيذ متسلسل بلا خيوط أو yield. [1] [2]

المراجع

  1. Python chdir
  2. CPython contextlib

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.