التقاط الخطأ وتسجيله دون raise داخل مولدنا يكبحه هنا. [1] [2]
الخلاصة السريعة
لا دون إعادة رفعه هنا. [1] [2]
- التقاط الخطأ وتسجيله دون raise داخل مولدنا يكبحه هنا. [1] [2]
- في CPython 3.12.14، own_manager تقدم "bud" وتلتقط ValueError وتضيف "caught" للسجل دون raise. [1] [2]
- رفعنا ValueError داخل with؛ لم تصل except الخارجية: escaped=False، ووصلت التعليمة بعد with: after=True؛ السجل ["caught"]. [1] [2]
- انتهاء المولد بعد الالتقاط يدل هنا على معالجة الخطأ. [1] [2]
- تحكم جديد: control_manager تلتقط وتعيد رفع error=ValueError("control")؛ control_escaped=True وcontrol_after=False وsame_error=True لهوية الخطأ نفسه. مولدان متزامنان بقيمة yield واحدة وسجلين مستقلين؛ لا موارد فعلية. [1] [2]
التسجيل
التقاط الخطأ وتسجيله دون raise داخل مولدنا يكبحه هنا. [1] [2]
المولد
في CPython 3.12.14، own_manager تقدم "bud" وتلتقط ValueError وتضيف "caught" للسجل دون raise. [1] [2]
الخروج
رفعنا ValueError داخل with؛ لم تصل except الخارجية: escaped=False، ووصلت التعليمة بعد with: after=True؛ السجل ["caught"]. [1] [2]
from contextlib import contextmanager @contextmanager def own_manager(events): try:yield "bud" except ValueError:events.append("caught") own_events=[];escaped=after=False try: with own_manager(own_events):raise ValueError("owned") after=True except ValueError:escaped=True print(own_events,escaped,after) [1] [2]

إعادة الرفع
انتهاء المولد بعد الالتقاط يدل هنا على معالجة الخطأ. [1] [2]
@contextmanager def control_manager(events): try:yield "bud" except ValueError: events.append("caught") raise control_events=[];error=ValueError("control") control_escaped=control_after=same_error=False try: with control_manager(control_events):raise error control_after=True except ValueError as exc:control_escaped=True;same_error=exc is error print(control_events,control_escaped,control_after,same_error) [1] [2]
تحكم جديد: control_manager تلتقط وتعيد رفع error=ValueError("control")؛ control_escaped=True وcontrol_after=False وsame_error=True لهوية الخطأ نفسه. مولدان متزامنان بقيمة yield واحدة وسجلين مستقلين؛ لا موارد فعلية. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
