Me gustaría comprobar si el usuario ha establecido un argumento opcional argparse o no.
¿Puedo verificar de forma segura usando isset?
Algo como esto:
if(isset(args.myArg)):
#do something
else:
#do something else
¿Funciona igual para los argumentos de tipo float / int / string?
Podría establecer un parámetro predeterminado y verificarlo (por ejemplo, establecer myArg = -1, o "" para una cadena, o "NOT_SET"). Sin embargo, el valor que en última instancia quiero usar solo se calcula más adelante en el script. Entonces lo establecería en -1 como predeterminado y luego lo actualizaría a otra cosa más adelante. Esto parece un poco torpe en comparación con simplemente verificar si el valor fue establecido por el usuario.

isset()(pista: Python no es PHP)? ¿Querías decir enhasattr()cambio, quizás? ¿Por qué no configurar argparse para establecer un valor predeterminado para una opción en su lugar?Respuestas:
Creo que los argumentos opcionales (especificados con
--) se inicializanNonesi no se proporcionan. Entonces puedes probar conis not None. Pruebe el siguiente ejemplo:fuente
defaultvalor definido.default, aún puede establecernargs='?'y proporcionar unconstvalor, como se describe en los documentos . Cuando arg está ausente,defaultse usa, cuando arg se da sin valor, entoncesconstse usa, de lo contrario se usa el valor dado. Con solodefaultynargs='?',defaultse usa si no se da,Nonesi se da sin valor, de lo contrario el valor dado.action= "store_true"oaction="store_const", const="yourconst"no puede usar ese argumento para almacenar otro valor. Esto no funcionará si se utilizan valores predeterminados. En el mío, eliminé todos los valores predeterminados de argparser y manejé todo dentro de otra funcióndef defaults():en la que combino ConfigParser, ArgumentParser y los valores predeterminados en el orden que quieroaction. La respuesta no usa unaction. Las acciones que menciona están documentadas para comportarse de una manera específica (como observó). Sin embargo, no es necesario definir una acción.Como señala @Honza,
is Nonees una buena prueba. Es el valor predeterminadodefaulty el usuario no puede darle una cadena que lo duplique.Puede especificar otro
default='mydefaultvaluey probarlo. Pero, ¿y si el usuario especifica esa cadena? ¿Eso cuenta como escenario o no?También puede especificar
default=argparse.SUPPRESS. Entonces, si el usuario no usa el argumento, no aparecerá en elargsespacio de nombres. Pero probar eso podría ser más complicado:Internamente,
parsermantiene una listaseen_actionsy la usa para pruebas 'requeridas' y 'mutuamente_exclusivas'. Pero no está disponible para ti fuera deparse_args.fuente
Creo que usar la opción
default=argparse.SUPPRESStiene más sentido. Entonces, en lugar de comprobar si el argumento esnot None, se comprueba si el argumento esinel espacio de nombres resultante.Ejemplo:
Uso:
No se proporciona el argumento:fuente
testfoo.py: error: argument --foo: expected one argument--foosin un valor (es decir,1en mi ejemplo), debe especificarlonargs=0en laadd_argumentfunción.action='store_true'respuesta a continuación en su lugar en mi código real.python argparse_test.py --foo 1?Puede comprobar una bandera opcionalmente con pasado
store_trueystore_falseopciones de acción argumento:De esta manera, no tiene que preocuparse por verificar por condicional
is not None. Simplemente buscaTrueoFalse. Lea más sobre estas opciones en los documentos aquí.fuente
Si su argumento es posicional (es decir, no tiene un prefijo "-" o "-", solo el argumento, generalmente un nombre de archivo), entonces puede usar el parámetro nargs para hacer esto:
fuente
Aquí está mi solución para ver si estoy usando una variable argparse
Esto podría dar más información sobre la respuesta anterior que utilicé y adapté para trabajar en mi programa.
fuente
Para abordar el comentario de @ kcpr sobre la respuesta (actualmente aceptada) de @Honza Osobne
primero se puede verificar si el argumento se proporcionó comparándolo con el
Namespaceobjeto y proporcionando ladefault=argparse.SUPPRESSopción (consulte las respuestas de @ hpaulj y @Erasmus Cedernaes y este documento de python3 ) y si no se ha proporcionado, configúrelo en un valor predeterminado.Uso
fuente
Muy simple, después de definir la variable args por 'args = parser.parse_args ()', también contiene todos los datos de las variables del subconjunto args. Para verificar si una variable está establecida o no, asumiendo que se usa 'action = "store_true" ...
fuente