parser.add_argument('-auto', action='store_true')
Comment puis-je stocker false si ce -auto
n'est pas spécifié? Je me souviens vaguement que de cette façon, il ne stocke aucun si non spécifié
parser.add_argument('-auto', action='store_true')
Comment puis-je stocker false si ce -auto
n'est pas spécifié? Je me souviens vaguement que de cette façon, il ne stocke aucun si non spécifié
L' store_true
option crée automatiquement une valeur par défaut False .
De même, la store_false
valeur par défaut est True lorsque l'argument de ligne de commande n'est pas présent.
La source de ce comportement est succincte et claire: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
La documentation argparse n'est pas claire sur le sujet, je vais donc les mettre à jour maintenant: http://hg.python.org/cpython/rev/49677cc6d83a
-bar
, alors ledest
est automatiquement défini surbar
, basé sur hg.python.org/cpython/rev/49677cc6d83a . Cependant, je ne vois pas où ce comportement par défaut est défini dans le code. J'ai toujours défini l'dest
argument explicitement. De plus, je pense que laisserbar
par défautdest
l'--bar
option pour l' option n'a pas vraiment de sens si--bar
c'est le casstore_false
. Cela ne devrait-il pasdest
êtrenotbar
dans ce cas?Avec
fonctionnement
rendements
Il semble donc être stocké
False
par défaut.la source
Raymond Hettinger répond déjà à la question d'OP.
Cependant, mon groupe a rencontré des problèmes de lisibilité en utilisant "store_false". Surtout lorsque de nouveaux membres rejoignent notre groupe. En effet, la manière la plus intuitive de penser est que lorsqu'un utilisateur spécifie un argument, la valeur correspondant à cet argument sera True ou 1.
Par exemple, si le code est -
Le lecteur de code peut s'attendre à ce que l'instruction de journalisation soit désactivée lorsque la valeur de stop_logging est vraie. Mais un code tel que le suivant conduira à l' opposé du comportement souhaité -
D'un autre côté, si l'interface est définie comme suit, alors le "if-statement" fonctionne et est plus intuitif à lire -
la source
parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
.store_false sera en fait
0
par défaut par défaut (vous pouvez tester pour vérifier). Pour modifier la valeur par défaut, ajoutez simplementdefault=True
à votre déclaration.Donc dans ce cas:
parser.add_argument('-auto', action='store_true', default=True)
la source
>>> parser.add_argument('--bar', action='store_false')
_StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args([])
Namespace(bar=True)