]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-9182: Add a section on specifying positional arguments (#31810)
authorslateny <46876382+slateny@users.noreply.github.com>
Fri, 13 May 2022 14:17:07 +0000 (07:17 -0700)
committerGitHub <noreply@github.com>
Fri, 13 May 2022 14:17:07 +0000 (09:17 -0500)
Doc/howto/argparse.rst
Doc/library/argparse.rst

index a97d10cfe6bb6902c0b927eda2bb5556cebbbe8a..3075b0142d16d600ad18054b0d1c9037474b8576 100644 (file)
@@ -664,6 +664,35 @@ Output:
    4^2 == 16
 
 
+.. _specifying-ambiguous-arguments:
+
+Specifying ambiguous arguments
+------------------------------
+
+When there is ambiguity in deciding whether an argument is positional or for an
+argument, ``--`` can be used to tell :meth:`~ArgumentParser.parse_args` that
+everything after that is a positional argument::
+
+   >>> parser = argparse.ArgumentParser(prog='PROG')
+   >>> parser.add_argument('-n', nargs='+')
+   >>> parser.add_argument('args', nargs='*')
+
+   >>> # ambiguous, so parse_args assumes it's an option
+   >>> parser.parse_args(['-f'])
+   usage: PROG [-h] [-n N [N ...]] [args ...]
+   PROG: error: unrecognized arguments: -f
+
+   >>> parser.parse_args(['--', '-f'])
+   Namespace(args=['-f'], n=None)
+
+   >>> # ambiguous, so the -n option greedily accepts arguments
+   >>> parser.parse_args(['-n', '1', '2', '3'])
+   Namespace(args=[], n=['1', '2', '3'])
+
+   >>> parser.parse_args(['-n', '1', '--', '2', '3'])
+   Namespace(args=['2', '3'], n=['1'])
+
+
 Conflicting options
 -------------------
 
index 1f40e4a84505d2c76f024515c48b80ee5f3e0c0d..83dd3cdf03136d245013417574e7422f12f5bb88 100644 (file)
@@ -951,8 +951,8 @@ nargs
 
 ArgumentParser objects usually associate a single command-line argument with a
 single action to be taken.  The ``nargs`` keyword argument associates a
-different number of command-line arguments with a single action.  The supported
-values are:
+different number of command-line arguments with a single action.
+See also :ref:`specifying-ambiguous-arguments`. The supported values are:
 
 * ``N`` (an integer).  ``N`` arguments from the command line will be gathered
   together into a list.  For example::
@@ -1610,6 +1610,9 @@ argument::
    >>> parser.parse_args(['--', '-f'])
    Namespace(foo='-f', one=None)
 
+See also :ref:`the argparse howto on ambiguous arguments <specifying-ambiguous-arguments>`
+for more details.
+
 .. _prefix-matching:
 
 Argument abbreviations (prefix matching)