parser namespace example and python parsing argparse

namespace - python flags example



TypeError:__init__() obtuvo un argumento de "palabra clave" inesperado en argparse (2)

Hola, entonces estoy usando argparse para intentar generar un informe trimestral. Así es como se ve el código:

parser = argparse.ArgumentParser() parser.add_argument(''-q'', "--quarter", action=''store_true'', type=int, help="Enter a Quarter number: 1,2,3, or 4 ") parser.add_argument(''-y'', "--year", action=''store_true'',type=str,help="Enter a year in the format YYYY ") args = parser.parse_args()

el error que recibo es:

TypeError: init () obtuvo un ''tipo'' de argumento de palabra clave inesperado

Por lo que puedo decir del tipo de documentación argparse es uno de los parámetros de la función add_argument. Intenté quitar esto y actualizar el código para:

parser = argparse.ArgumentParser() parser.add_argument(''-q'', "--quarter", action=''store_true'', help="Enter a Quarter number: 1,2,3, or 4 ") parser.add_argument(''-y'', "--year", action=''store_true'',help="Enter a year in the format YYYY ") args = parser.parse_args()

Luego intenté ejecutarlo con: python scriptname.py -q 1 -y 2015 y me está dando el siguiente error:

error: argumentos no reconocidos: 1 2015

Yo tampoco sé por qué es eso. ¿Alguien puede por favor arrojar algo de luz sobre esto?


La documentación argparse no es tan detallada como podría ser (pero todavía tiene más información de la que muchos usuarios pueden absorber).

En particular, la información real que necesita un argumento varía con la action .

parser.add_argument(''-q'', "--quarter", action=''store_true'', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")

Una acción store_true no toma ningún parámetro (es decir, nargs = 0). Su valor predeterminado es False , y si se usa, el atributo se establece en True .

Si quieres que el usuario dé uno de esos cuatro números, sugiero usar

parser.add_argument(''-q'', ''--quarter'', type=int, choices=[1,2,3,4], help="...")

https://docs.python.org/3/library/argparse.html#choices tiene un ejemplo similar.

Los ejemplos en https://docs.python.org/3/library/argparse.html#action dan una idea bastante buena de qué parámetros toma cada clase de acción.

Hay un error / problema de Python que trata de mejorar la documentación o el mensaje de error cuando se proporcionan parámetros innecesarios en la función. En su estado actual, es la definición de la subclase de Python la que emite el mensaje de error.


Lo que significa action="store_true" es que si el argumento se proporciona en la línea de comando, entonces se debe almacenar un valor True en el analizador. Lo que realmente desea es almacenar el año dado (como una cadena) y el trimestre (como un int).

parser = argparse.ArgumentParser() parser.add_argument(''-q'', "--quarter", type=int, help="Enter a Quarter number: 1,2,3, or 4 ") parser.add_argument(''-y'', "--year", type=str, help="Enter a year in the format YYYY ") args = parser.parse_args()

Cuando especifica action=''store_true argparse se crea una instancia interna de una instancia _StoreAction cuyo constructor no acepta un parámetro de type (ya que siempre será un valor booleano (Verdadero / Falso)). No puede proporcionar action="store_true" y ''type'' al mismo tiempo.