Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SystemExit: 2 error when calling parse_args() within ipython

I'm learning basics of Python and got already stuck at the beginning of argparse tutorial. I'm getting the following 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

a %tb command gives the following output:

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

How could I fix this problem?

like image 447
Haik Avatar asked Feb 15 '17 12:02

Haik


3 Answers

argparse is a module designed to parse the arguments passed from the command line, so for example if you type the following at a command prompt:

$ python my_programme.py --arg1=5 --arg2=7

You can use argparse to interpret the --arg1=5 --arg2=7 part. If argparse thinks the arguments are invalid, it exits, which in general is done in python by calling sys.exit() which raises the SystemExit error, which is what you're seeing.

So the problem is you're trying to use argparse from an interactive interpreter (looks like ipython), and at this point the programme has already started, so the args should have already been parsed.

To try it properly create a separate python file such as my_programme.py and run it using python from a command line, as I illustrated.

like image 143
daphtdazz Avatar answered Nov 15 '22 10:11

daphtdazz


[quick solution] Add an dummy parser argument in the code

parser.add_argument('-f')
like image 30
johninvirtual Avatar answered Nov 15 '22 08:11

johninvirtual


had run into a similar issue. adding these lines fixed the issue for me.

import sys
sys.argv=['']
del sys
like image 21
algorythms Avatar answered Nov 15 '22 08:11

algorythms