Test case:
from argparse import *
parser = ArgumentParser()
parser.add_argument('-x', action='store_true')
parser.add_argument('y')
parser.add_argument('z', nargs='*')
print parser.parse_args('yy -x zz'.split(' '))
The result of this is that the "z" option is unfilled, and the "zz" argument is unrecognized, resulting in an error. Changing the 'nargs' to '+' works in this case, but results in errors if the 'zz' is left off.