تقنية

CycleError في بايثون: هل يمنع استلام العقدة المستقلة؟

دورة بين عقدتين وعقدة مستقلة جاهزة
التقاط الاستثناء. [1] [2]

نفحص حالة المرتب بعد اكتشاف دورة. [1] [2]

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

لا؛ بعد التقاط الاستثناء نستلم free هنا. [1] [2]

  • a وb تنتظر إحداهما الأخرى؛ free بلا سابق. [1] [2]
  • prepare يرفع CycleError؛ نطبع cycle. [1] [2]
  • get_ready يعيد ('free',). [1] [2]
  • بعد done('free') يعيد is_active القيمة False. [1] [2]
  • الدورة لم تحل؛ اختبرنا حالات 3.12.14 دون تنفيذ مهام. [1] [2]

المثال

import graphlib as g
t=g.TopologicalSorter({'a':{'b'},'b':{'a'},'free':set()})
try:t.prepare()
except g.CycleError:print('cycle')
print(t.get_ready())
t.done('free')
print(t.is_active())

[1] [2]

ماذا بقي قابلًا للاستلام؟

الاستثناء هنا لا يلغي الجاهز المستقل. تستمر واجهة الاستلام حتى تمنع الدورات مزيدًا من التقدم. سجلنا معالجة free يدويًا؛ لا يعني ذلك إنجاز عمل خارج البرنامج. [1] [2]

توقف التقدم مع بقاء الدورة
حالة المرتب. [1] [2]

لماذا لا تعني False حل الرسم؟

لم تعد هناك عقدة جاهزة أو مستلمة تنتظر الإبلاغ بمعالجتها، لكن a وb بقيتا عالقتين. False تصف توقف التقدم، ولا تشهد بترتيب كامل للرسم ذي الدورة. نفحص ثلاث عقد بأسماء نصية، لا مددًا أو تشغيلًا متوازيًا. [1] [2]

المراجع

  1. Python 3.12: graphlib
  2. CPython 3.12.14: graphlib.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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