parser.add_argument('-auto', action='store_true')
¿Cómo puedo almacenar false si -auto
no está especificado? Puedo recordar vagamente que de esta manera, almacena Ninguno si no se especifica
parser.add_argument('-auto', action='store_true')
¿Cómo puedo almacenar false si -auto
no está especificado? Puedo recordar vagamente que de esta manera, almacena Ninguno si no se especifica
La store_true
opción crea automáticamente un valor predeterminado de Falso .
Asimismo, store_false
se establecerá por defecto en True cuando el argumento de la línea de comandos no esté presente.
La fuente de este comportamiento es sucinta y clara: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Los documentos argparse no son claros sobre el tema, así que los actualizaré ahora: http://hg.python.org/cpython/rev/49677cc6d83a
-bar
, entoncesdest
se establece automáticamente enbar
, según hg.python.org/cpython/rev/49677cc6d83a . Sin embargo, no veo dónde se establece este comportamiento predeterminado en el código. Siempre he establecido eldest
argumento explícitamente. Además, creo que dejar la opciónbar
predeterminadadest
para la--bar
opción no tiene sentido si lo--bar
esstore_false
. ¿No deberíadest
sernotbar
en este caso?Con
corriendo
rendimientos
Entonces parece que se almacena
False
de forma predeterminada.fuente
Raymond Hettinger ya responde a la pregunta de OP.
Sin embargo, mi grupo ha experimentado problemas de legibilidad al utilizar "store_false". Especialmente cuando nuevos miembros se unen a nuestro grupo. Esto se debe a que la forma más intuitiva de pensar es que cuando un usuario especifica un argumento, el valor correspondiente a ese argumento será Verdadero o 1.
Por ejemplo, si el código es -
Es probable que el lector de código espere que la declaración de registro esté desactivada cuando el valor de stop_logging sea verdadero. Pero un código como el siguiente conducirá al comportamiento opuesto al deseado:
Por otro lado, si la interfaz se define de la siguiente manera, entonces la "instrucción if" funciona y es más intuitiva de leer:
fuente
parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
.store_false en realidad se establecerá de forma
0
predeterminada (puede probar para verificar). Para cambiar el valor predeterminado, simplemente agreguedefault=True
a su declaración.Entonces en este caso:
parser.add_argument('-auto', action='store_true', default=True)
fuente
>>> 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)