"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تحليل القيم المنطقية بشكل صحيح في argparse؟

كيف يمكنني تحليل القيم المنطقية بشكل صحيح في argparse؟

تم النشر بتاريخ 2024-11-23
تصفح:425

How Can I Parse Boolean Values Correctly in argparse?

تحليل القيم المنطقية باستخدام argparse

في argparse، يعد تحليل وسيطات سطر الأوامر المنطقية مهمة شائعة، ولكن ينشأ خطأ شائع عند المحاولة لتحليل قيم مثل "--foo True" أو "--foo False" باستخدام الوسيطة type=bool. من المثير للدهشة أنه حتى عند استخدام سلسلة فارغة كوسيطة (على سبيل المثال، "--foo " ")، يتم تقييم القيمة التي تم تحليلها إلى True.

للحصول على تحليل منطقي صحيح، يقدم argparse طريقتين موصى بهما:

المنهج الأساسي:

استخدم "--feature" و"--no-feature" بناء الجملة، مدعوم أصلاً بواسطة argparse في إصدار Python 3.9 والإصدارات الأحدث:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)
في إصدارات Python أدناه 3.9:

parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
باستخدام هذا الأسلوب، يؤدي وجود "--feature" إلى تعيين القيمة إلى True، بينما يؤدي وجود "--no-feature" إلى تعيينها إلى False. غياب أي من الوسيطتين الافتراضيتين هو True.

الأسلوب الاختياري (باستخدام تحويل النوع):

إذا كان بناء الجملة "--arg " هو المطلوب ، يمكن استخدام وظائف تحويل النوع المخصص. أحد الأمثلة هو ast.literal_eval:

parser.add_argument("--arg", type=ast.literal_eval)
بدلاً من ذلك، يمكن إنشاء دالة معرفة من قبل المستخدم:

def true_or_false(arg):
    تعميم الوصول إلى الخدمات = str(arg).upper()
    إذا كان "صحيح". يبدأ بـ (ua):
       عودة صحيح
    إليف "خطأ". يبدأ بـ (وا):
       العودة كاذبة
    آخر:
       رفع argparse.ArgumentTypeError('قيمة منطقية غير صالحة')
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3