تقنية

done في بايثون: هل يعيد ValueError حالة المرتب كما كانت؟

root -> leaf; root received; done("root","missing"): ValueError; ready=("leaf",)
الصحيح أولًا.

في CPython 3.12.14، قد ترفع done خطأً بعد معالجة عقدة سابقة في النداء؛ الأثر يبقى في مثالنا. [1] [2]

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

لا في المثال؛ الخطأ لا يمحو الأثر السابق. [1] [2]

  • في CPython 3.12.14، قد ترفع done خطأً بعد معالجة عقدة سابقة في النداء؛ الأثر يبقى في مثالنا. [1] [2]
  • leaf تعتمد على root. نستلم root قبل النداء؛ missing لم نضفها للرسم. [1] [2]
  • done("root","missing") ترفع ValueError، لكن get_ready التالية تعيد ("leaf",)؛ سُجلت معالجة root قبل الخطأ. [1] [2]
  • التنفيذ يتحقق ويعالج كل عقدة قبل الانتقال للتالية؛ ليس فحصًا كاملًا لجميع الوسائط قبل التغيير هنا. [1] [2]
  • تحكم مستقل: عكس الوسيطين يرفع ValueError ويترك الجاهز (). بعدها done("root") تحرر leaf. نختبر حالة المرتب، دون تنفيذ مهام. [1] [2]

الأثر والإصدار

في CPython 3.12.14، قد ترفع done خطأً بعد معالجة عقدة سابقة في النداء؛ الأثر يبقى في مثالنا. [1] [2]

العقد والتهيئة

leaf تعتمد على root. نستلم root قبل النداء؛ missing لم نضفها للرسم. [1] [2]

صحيح ثم مفقود

done("root","missing") ترفع ValueError، لكن get_ready التالية تعيد ("leaf",)؛ سُجلت معالجة root قبل الخطأ. [1] [2]

from graphlib import TopologicalSorter def make(): t=TopologicalSorter({"leaf":{"root"},"root":set()}) t.prepare();t.get_ready();return t own=make() try:own.done("root","missing") except ValueError:print("ValueError") print(own.get_ready()) [1] [2]

root -> leaf; root received; done("missing","root"): ValueError; ready=()
المفقود أولًا.

المعالجة والتحكم المعكوس

التنفيذ يتحقق ويعالج كل عقدة قبل الانتقال للتالية؛ ليس فحصًا كاملًا لجميع الوسائط قبل التغيير هنا. [1] [2]

control=make() try:control.done("missing","root") except ValueError:print("ValueError") print(control.get_ready()) control.done("root") print(control.get_ready()) [1] [2]

تحكم مستقل: عكس الوسيطين يرفع ValueError ويترك الجاهز (). بعدها done("root") تحرر leaf. نختبر حالة المرتب، دون تنفيذ مهام. [1] [2]

المراجع

  1. Python graphlib
  2. CPython graphlib

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

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