Maison >développement back-end >Tutoriel Python >Pourquoi \'--foo False\' est-il évalué à True lors de l'analyse d'arguments booléens avec argparse ?

Pourquoi \'--foo False\' est-il évalué à True lors de l'analyse d'arguments booléens avec argparse ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 19:05:29879parcourir

Why Does

Analyse des valeurs booléennes avec argparse

Question :

Lors de l'analyse des arguments booléens de ligne de commande avec argparse, pourquoi les valeurs comme "--foo False" évalué à True au lieu de False ?

Réponse :

Méthode canonique :

La L'approche recommandée consiste à utiliser le format suivant :

command --feature

Pour annuler la fonctionnalité, utilisez :

command --no-feature

argparse fournit une prise en charge intégrée pour cela :

  • 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)

Méthode alternative pour l'analyse personnalisée :

Si le format "--foo True/False" est préféré, un L'option consiste à utiliser ast.literal_eval ou une fonction personnalisée comme type :

import ast

def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
        return True
    elif 'FALSE'.startswith(ua):
        return False
    else:
        pass  # Handle error condition appropriately
<code class="python">parser.add_argument("--my_bool", type=ast.literal_eval)
parser.add_argument("--my_bool", type=t_or_f)</code>

Cette fonction personnalisée interprète les majuscules True/Fals comme des valeurs booléennes, permettant une analyse flexible de ces valeurs.

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:
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