Maison > développement back-end > Tutoriel Python > Comment gérer correctement les arguments booléens avec argparse en Python ?

Comment gérer correctement les arguments booléens avec argparse en Python ?

Susan Sarandon
Libérer: 2024-10-28 08:11:30
original
656 Les gens l'ont consulté

How to Properly Handle Boolean Arguments with argparse in Python?

Gestion des arguments booléens dans argparse

L'analyse des arguments à partir de la ligne de commande peut être simplifiée à l'aide du module argparse en Python. Bien qu'il prenne en charge l'analyse des indicateurs booléens, certains scénarios peuvent conduire à des résultats inattendus.

Pour analyser correctement les valeurs booléennes telles que "--foo True" ou "--foo False", le comportement par défaut d'argparse peut ne pas suffire. Par exemple, l'utilisation de type=bool seul peut entraîner des résultats inattendus lorsque les arguments sont définis sur "False" ou sur des chaînes vides.

Une solution consiste à exploiter la BooleanOptionalAction introduite dans Python 3.9. Cette action offre une gestion plus intuitive des valeurs booléennes, convertissant automatiquement True, t, y, yes et 1 en True et False, f, n, no et 0 en False.

Pour les versions Python antérieures 3.9, une solution de contournement consiste à combiner les actions « store_true » et « store_false ». L'action 'store_true' définit un indicateur sur True lorsqu'il est présent, tandis que 'store_false' le définit sur False. Par défaut, l'indicateur est supposé être True, permettant aux utilisateurs de spécifier des indicateurs positifs et négatifs :

<code class="python">import argparse

parser = argparse.ArgumentParser(description="My parser")
parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

cmd_line = ["--no-feature"]
parsed_args = parser.parse_args(cmd_line)

if parsed_args.feature:
    print("Feature is True.")
else:
    print("Feature is False.")</code>
Copier après la connexion

Alternativement, des fonctions personnalisées peuvent être définies pour gérer une logique d'analyse spécifique. Par exemple, une fonction qui fait la distinction entre « Vrai » et « Faux » sans tenir compte de la casse :

<code class="python">def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
        return True
    elif 'FALSE'.startswith(ua):
        return False
    else:
        raise ValueError("Invalid argument: {}".format(arg))</code>
Copier après la connexion

Cette fonction peut ensuite être utilisée avec le paramètre de type d'argparse :

<code class="python">import argparse

parser = argparse.ArgumentParser(description="My parser")
parser.add_argument('--my_bool', type=t_or_f)

cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse_args(cmd_line)

if parsed_args.my_bool:
    print("my_bool is True.")
else:
    print("my_bool is False.")</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal