Estoy aprendiendo los conceptos básicos de Python y ya me quedé atascado al comienzo del tutorial de argparse. Recibo 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: 2un comando %tb da el siguiente resultado:
SystemExit Traceback (most recent call last) <ipython-input-16-843cc484f12f> in <module>() ----> 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?
argparse es un módulo diseñado para analizar los argumentos pasados desde la línea de comando , por ejemplo, si escribe lo siguiente en un símbolo del sistema:
$ python my_programme.py --arg1=5 --arg2=7 Puede usar argparse para interpretar la --arg1=5 --arg2=7 . Si argparse cree que los argumentos no son válidos, sale, lo que en general se hace en python al llamar a sys.exit() , lo que genera el error SystemExit , que es lo que está viendo.
Entonces, el problema es que está tratando de usar argparse desde un intérprete interactivo (se parece a ipython), y en este punto el programa ya se inició, por lo que los argumentos ya deberían haberse analizado.
Para probarlo correctamente, cree un archivo python separado, como my_programme.py , y ejecútelo usando python desde una línea de comando, como se ilustra.
[ solución rápida ] Agregue un argumento de analizador ficticio en el código
parser.add_argument('-f')se había encontrado con un problema similar. agregar estas líneas solucionó el problema para mí.
import sys sys.argv=[''] del sys