تقنية

exit_on_error=False في argparse: هل يمنع error() من الخروج؟

خروج مباشر؛ argparse; exit_on_error:False; error("own"); SystemExit:2; stderr:nonempty
مباشر.

error() المباشرة تخرج رغم الضبط هنا. [1] [2]

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

لا؛ الاستدعاء المباشر يثير SystemExit بالرمز 2 هنا. [1] [2]

  • error() المباشرة تخرج رغم الضبط هنا. [1] [2]
  • على CPython 3.12.14، محلل عادي دون تعديل مع exit_on_error=False؛ نستدعي error("own") مباشرة. [1] [2]
  • يثير SystemExit بالرمز 2 ويكتب إلى stderr؛ نلتقط الخروج لمتابعة المثال. [1] [2]
  • error() تستدعي exit(2)؛ الضبط يغير معالجة ArgumentError أثناء التحليل، ولا يمنع هذا الاستدعاء المباشر. [1] [2]
  • تحكم مستقل بالضبط نفسه: --n مع type=int ومدخل ["--n","bud"]؛ يثير ArgumentError دون كتابة إلى stderr هنا. [1] [2]

الاستدعاء المباشر

error() المباشرة تخرج رغم الضبط هنا. [1] [2]

الضبط

على CPython 3.12.14، محلل عادي دون تعديل مع exit_on_error=False؛ نستدعي error("own") مباشرة. [1] [2]

خروج ورسالة

يثير SystemExit بالرمز 2 ويكتب إلى stderr؛ نلتقط الخروج لمتابعة المثال. [1] [2]

import argparse,contextlib,io own=argparse.ArgumentParser(exit_on_error=False) buf=io.StringIO() try: with contextlib.redirect_stderr(buf): own.error("own") except SystemExit as ex: print(ex.code,bool(buf.getvalue())) [1] [2]

تحكم مستقل؛ argparse; exit_on_error:False; --n,type:int; input:["--n","bud"]; ArgumentError; stderr:empty
تحويل.

خطأ تحويل

error() تستدعي exit(2)؛ الضبط يغير معالجة ArgumentError أثناء التحليل، ولا يمنع هذا الاستدعاء المباشر. [1] [2]

control=argparse.ArgumentParser(exit_on_error=False) control.add_argument("--n",type=int) cbuf=io.StringIO() try: with contextlib.redirect_stderr(cbuf): control.parse_args(["--n","bud"]) except argparse.ArgumentError: print("ArgumentError",cbuf.getvalue()=="") [1] [2]

تحكم مستقل بالضبط نفسه: --n مع type=int ومدخل ["--n","bud"]؛ يثير ArgumentError دون كتابة إلى stderr هنا. [1] [2]

المراجع

  1. Python argparse
  2. CPython argparse

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

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