On Dec 3, 11:47 am, Neal Becker <[EMAIL PROTECTED]> wrote: > Robert Kern wrote: > > Neal Becker wrote: > >> This example is right out of python library reference. What's wrong > >> here? > > >> import optparse > > >> def store_value(option, opt_str, value, parser): > >> setattr(parser.values, option.dest, value) > > >> parser = optparse.OptionParser() > >> parser.add_option("--foo", > >> action="callback", callback=store_value, > >> type="int", nargs=3, dest="foo") > > >> (opt,args) = parser.parse_args ('--foo a b c'.split()) > > >> [...] > >> /usr/lib64/python2.5/optparse.pyc in _process_args(self, largs, rargs, > >> values) > >> 1423 elif self.allow_interspersed_args: > >> 1424 largs.append(arg) > >> -> 1425 del rargs[0] > >> 1426 else: > >> 1427 return # stop now, leave this > >> arg in rargs > > >> TypeError: 'str' object doesn't support item deletion > > > Dunno. It works for me (i.e. I get the expected "error: option --foo: > > invalid integer value: 'a'"). Have you tried it outside of IPython? > > yes: > python test_opt.py > Traceback (most recent call last): > File "test_opt.py", line 12, in <module> > (opt,args) = parser.parse_args ('--foo') > File "/usr/lib64/python2.5/optparse.py", line 1378, in parse_args > stop = self._process_args(largs, rargs, values) > File "/usr/lib64/python2.5/optparse.py", line 1425, in _process_args > del rargs[0] > TypeError: 'str' object doesn't support item deletion
This is rather confusing: on my system the two source lines and numbers in the traceback correspond to the Python 2.6 source, but don't correspond to the Python 2.5 source. However, your path is .../ python2.5/... Unfortunately, although optparse has changed between 2.5 and 2.6, optparse.__version__ wasn't changed from "1.5.3" so it's no use asking you to print that. Working backwards from the error, it seems that by the time this is executed: stop = self._process_args(largs, rargs, values) rargs has become a string instead of a list of strings. Perhaps you would like to (1) check your optparse.py for corruption and (2) put some temporary print statements along the trail from your *** AARRGGHH!! *** '--foo' in your second message should be ['--foo'] so how come you got an error with '--foo a b c'.split() in your first message??? I'll try again: Perhaps you would like to (1) check your optparse.py for corruption and then (2) if you still have a problem, show us the contents of your test_opt.py and the results of running that at the command line. It would be nice if you included: import sys; print sys.version near the top of test_opt.py. HTH, John -- http://mail.python.org/mailman/listinfo/python-list