Estoy aprendiendo los conceptos básicos de Python y ya me quedé atascado al comienzo del tutorial de Argparse. Estoy recibiendo el siguiente error:
import argparse parser = argparse.ArgumentParser() args = parser.parse_args() usage: __main__.py [-h] echo __main__.py: error: unrecognized arguments: -f An exception has occurred, use %tb to see the full traceback. SystemExit: 2
un comando% tb da el siguiente resultado:
SystemExit Traceback (most recent call last) in () ----> 1 args = parser.parse_args() C:\Users\Haik\Anaconda2\lib\argparse.pyc in parse_args(self, args, namespace) 1702 if argv: 1703 msg = _('unrecognized arguments: %s') -> 1704 self.error(msg % ' '.join(argv)) 1705 return args 1706 C:\Users\Haik\Anaconda2\lib\argparse.pyc in error(self, message) 2372 """ 2373 self.print_usage(_sys.stderr) -> 2374 self.exit(2, _('%s: error: %s\n') % (self.prog, message)) C:\Users\Haik\Anaconda2\lib\argparse.pyc in exit(self, status, message) 2360 if message: 2361 self._print_message(message, _sys.stderr) -> 2362 _sys.exit(status) 2363 2364 def error(self, message): SystemExit: 2
¿Cómo podría solucionar este problema? Gracias
argparse
es un módulo diseñado para analizar los argumentos pasados desde la línea de comandos , por ejemplo, si escribe lo siguiente en el símbolo del sistema:
$ python my_programme.py --arg1=5 --arg2=7
Puede usar argparse
para interpretar la parte --arg1=5 --arg2=7
. Si argparse
piensa que los argumentos no son válidos, se cierra, lo que en general se hace en python llamando a sys.exit()
que genera el error SystemExit
, que es lo que está viendo.
Entonces, el problema es que estás tratando de usar argparse
desde un intérprete interactivo (parece ipython), y en este punto el progtwig ya se ha iniciado, por lo que los argumentos ya deberían haber sido analizados.
Para probarlo correctamente, cree un archivo python separado como my_programme.py
y ejecútelo usando python
desde una línea de comando, como my_programme.py
.
parse_args
método parse_args
, cuando se llama sin argumentos, intenta analizar el contenido de sys.argv
. Su proceso de intérprete ha llenado sys.argv
con valores que no coinciden con los argumentos admitidos por su instancia del parser
, por eso el análisis falla.
Intente imprimir sys.argv
para verificar qué argumentos se pasaron a su proceso de intérprete.
Intente llamar a parser.parse_args(['my', 'list', 'of', 'strings'])
para ver cómo funcionará el analizador para el intérprete iniciado con diferentes argumentos de cmdline.