SystemExit: 2 error when calling parse_args() in iPython Notebook
Asked Answered
J

3

7

I'm learning to use Python and scikit-learn and executed the following block of codes (originally from http://scikit-learn.org/stable/auto_examples/document_classification_20newsgroups.html#example-document-classification-20newsgroups-py) in iPython notebook (using Python 2.7):

from __future__ import print_function
from optparse import OptionParser

# parse commandline arguments
op = OptionParser()
op.add_option("--report",
              action="store_true", dest="print_report",
              help="Print a detailed classification report.")
op.add_option("--chi2_select",
              action="store", type="int", dest="select_chi2",
              help="Select some number of features using a chi-squared test")
op.add_option("--confusion_matrix",
              action="store_true", dest="print_cm",
              help="Print the confusion matrix.")
op.add_option("--top10",
              action="store_true", dest="print_top10",
              help="Print ten most discriminative terms per class"
                   " for every classifier.")
op.add_option("--all_categories",
              action="store_true", dest="all_categories",
              help="Whether to use all categories or not.")
op.add_option("--use_hashing",
              action="store_true",
              help="Use a hashing vectorizer.")
op.add_option("--n_features",
              action="store", type=int, default=2 ** 16,
              help="n_features when using the hashing vectorizer.")
op.add_option("--filtered",
              action="store_true",
              help="Remove newsgroup information that is easily overfit: "
                   "headers, signatures, and quoting.")

(opts, args) = op.parse_args()
if len(args) > 0:
    op.error("this script takes no arguments.")
    sys.exit(1)

Upon running the codes, I encountered the following error:

An exception has occurred, use %tb to see the full traceback.

SystemExit: 2


Usage: -c [options]

-c: error: no such option: -f
To exit: use 'exit', 'quit', or Ctrl-D.

I followed the instruction and executed %tb, and the following appeared:

---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
<ipython-input-1-d44fadf3a28b> in <module>()
     37                    "headers, signatures, and quoting.")
     38 
---> 39 (opts, args) = op.parse_args()
     40 if len(args) > 0:
     41     op.error("this script takes no arguments.")

C:\Anaconda\lib\optparse.pyc in parse_args(self, args, values)
   1399             stop = self._process_args(largs, rargs, values)
   1400         except (BadOptionError, OptionValueError), err:
-> 1401             self.error(str(err))
   1402 
   1403         args = largs + rargs

C:\Anaconda\lib\optparse.pyc in error(self, msg)
   1581         """
   1582         self.print_usage(sys.stderr)
-> 1583         self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))
   1584 
   1585     def get_usage(self):

C:\Anaconda\lib\optparse.pyc in exit(self, status, msg)
   1571         if msg:
   1572             sys.stderr.write(msg)
-> 1573         sys.exit(status)
   1574 
   1575     def error(self, msg):

SystemExit: 2

I understand that optparse has been deprecated in favour of argparse, but as I wanted to understand the tutorial block by block, I was hoping I can run the codes within iPython notebook to get a feel of how it works. It seems that someone else had this problem previously but there wasn't a solution proposed.

Is there a way to address this error so I can run the tutorial codes from within iPython notebook?

Joellenjoelly answered 8/1, 2014 at 15:55 Comment(2)
Possible duplicate of SystemExit: 2 error when calling parse_args()Consolidate
In my case, my code works in other IDE (same computer) and Jupyter notebook in another computerShortbread
I
2

You can add the arguments you need as a list of strings

(opts, args) = op.parse_args(["--report"])
Iceland answered 21/1, 2017 at 8:12 Comment(0)
C
2

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

op.add_option('-f')
Cami answered 21/2, 2020 at 7:15 Comment(0)
M
0

As you can see " error: no such option: -f " so you have to add:

op.add_option("-f", required=False)

This will work in your case:

from __future__ import print_function
from optparse import OptionParser

# parse commandline arguments
op = OptionParser()
op.add_option("--report",
          action="store_true", dest="print_report",
          help="Print a detailed classification report.")
op.add_option("--chi2_select",
          action="store", type="int", dest="select_chi2",
          help="Select some number of features using a chi-squared test")
op.add_option("--confusion_matrix",
          action="store_true", dest="print_cm",
          help="Print the confusion matrix.")
op.add_option("--top10",
          action="store_true", dest="print_top10",
          help="Print ten most discriminative terms per class"
               " for every classifier.")
op.add_option("--all_categories",
          action="store_true", dest="all_categories",
          help="Whether to use all categories or not.")
op.add_option("--use_hashing",
          action="store_true",
          help="Use a hashing vectorizer.")
op.add_option("--n_features",
          action="store", type=int, default=2 ** 16,
          help="n_features when using the hashing vectorizer.")
op.add_option("--filtered",
          action="store_true",
          help="Remove newsgroup information that is easily overfit: "
               "headers, signatures, and quoting.")
op.add_option("-f", required=False)

(opts, args) = op.parse_args()
    if len(args) > 0:
    op.error("this script takes no arguments.")
    sys.exit(1)
Meprobamate answered 18/12, 2022 at 17:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.