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]
الاستدعاء المباشر
الضبط
على 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](https://images.bahralolom.com/assets/local-2000-20261012/BA-1835/python-argparse-directerror-values.png)
خطأ تحويل
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]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
