homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author paul.j3
Recipients amcnabb, bethard, docs@python, guilherme-pg, paul.j3, r.david.murray, v+python
Date 2013年04月16日.07:09:43
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1366096185.32.0.672667122425.issue14191@psf.upfronthosting.co.za>
In-reply-to
Content
This patch permits the mixing of optionals with positionals, with the caveat that a particular positional cannot be split up.
If:
 parser = ArgumentParser()
 parser.add_argument('-f','--foo')
 parser.add_argument('cmd')
 parser.add_argument('rest', nargs='*')
 '-f1 cmd 1 2 3', 
 'cmd -f1 1 2 3', 
 'cmd 1 2 3 -f1' 
all give {cmd='cmd', rest=['1','2','3'], foo='1'}. 
But 'cmd 1 -f1 2 3', does not recognize ['2','3'].
Previously 'cmd -f1 1 2 3' would return rest=[], and not recognize ['1','2','3']. With this change the nargs='*' behaves more like nargs='+', surviving to parse the 2nd group of positional strings.
The trick is to modify arg_counts in consume_positionals(), removing matches that don't do anything (don't consume argument strings). 
 if 'O' in arg_strings_pattern[start_index:]:
 # if there is an optional after this, remove
 # 'empty' positionals from the current match
 while len(arg_counts)>1 and arg_counts[-1]==0:
 arg_counts = arg_counts[:-1]
This change passes all of the existing test_argparse.py tests. It also passes the optparse tests that I added in http://bugs.python.org/issue9334#msg184987
I added 4 cases to illustrate this change.
History
Date User Action Args
2013年04月16日 07:09:45paul.j3setrecipients: + paul.j3, amcnabb, bethard, v+python, r.david.murray, docs@python, guilherme-pg
2013年04月16日 07:09:45paul.j3setmessageid: <1366096185.32.0.672667122425.issue14191@psf.upfronthosting.co.za>
2013年04月16日 07:09:45paul.j3linkissue14191 messages
2013年04月16日 07:09:44paul.j3create

AltStyle によって変換されたページ (->オリジナル) /