redirect_stdout تستعيد التيار السابق عند الخروج بعد الخطأ في مثالنا. [1] [2]
الخلاصة السريعة
لا هنا؛ sys.stdout تعود إلى saved. [1] [2]
- redirect_stdout تستعيد التيار السابق عند الخروج بعد الخطأ في مثالنا. [1] [2]
- على CPython 3.12.14، نحفظ sys.stdout؛ نوجه print إلى StringIO ثم نرفع ValueError. [1] [2]
- بعد الخروج، sys.stdout is saved تعطي True؛ buffer.closed تعطي False والنص bud مع نهاية سطر. [1] [2]
- ValueError تصل إلى except الخارجية؛ استعادة التوجيه لا تخفي الخطأ هنا. [1] [2]
- تحكم بخروج عادي يلتقط leaf ويستعيد التيار أيضًا. التغيير عالمي؛ التجربة بلا خيوط أو عمليات فرعية. [1] [2]
توجيه مؤقت
redirect_stdout تستعيد التيار السابق عند الخروج بعد الخطأ في مثالنا. [1] [2]
تيار المثال
على CPython 3.12.14، نحفظ sys.stdout؛ نوجه print إلى StringIO ثم نرفع ValueError. [1] [2]
الاستعادة والمخزن
بعد الخروج، sys.stdout is saved تعطي True؛ buffer.closed تعطي False والنص bud مع نهاية سطر. [1] [2]
from contextlib import redirect_stdout from io import StringIO import sys saved=sys.stdout;buffer=StringIO() try: with redirect_stdout(buffer): print("bud") raise ValueError("bud") except ValueError: print(sys.stdout is saved) print(buffer.closed,repr(buffer.getvalue())) [1] [2]

الخطأ والتحكم
ValueError تصل إلى except الخارجية؛ استعادة التوجيه لا تخفي الخطأ هنا. [1] [2]
control=StringIO() with redirect_stdout(control): print("leaf") print(sys.stdout is saved,repr(control.getvalue())) [1] [2]
تحكم بخروج عادي يلتقط leaf ويستعيد التيار أيضًا. التغيير عالمي؛ التجربة بلا خيوط أو عمليات فرعية. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
