bpo-29951: Include function name for some error messages in `PyArg_Pa… · python/cpython@64c8f70 (original) (raw)
`@@ -1584,7 +1584,7 @@ PyArg_ValidateKeywordArguments(PyObject *kwargs)
`
1584
1584
` }
`
1585
1585
`if (!_PyDict_HasOnlyStringKeys(kwargs)) {
`
1586
1586
`PyErr_SetString(PyExc_TypeError,
`
1587
``
`-
"keyword arguments must be strings");
`
``
1587
`+
"keywords must be strings");
`
1588
1588
`return 0;
`
1589
1589
` }
`
1590
1590
`return 1;
`
`@@ -1655,7 +1655,7 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1655
1655
`nkwargs = (kwargs == NULL) ? 0 : PyDict_GET_SIZE(kwargs);
`
1656
1656
`if (nargs + nkwargs > len) {
`
1657
1657
`PyErr_Format(PyExc_TypeError,
`
1658
``
`-
"%s%s takes at most %d argument%s (%zd given)",
`
``
1658
`+
"%.200s%s takes at most %d argument%s (%zd given)",
`
1659
1659
` (fname == NULL) ? "function" : fname,
`
1660
1660
` (fname == NULL) ? "" : "()",
`
1661
1661
`len,
`
`@@ -1705,8 +1705,10 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1705
1705
` }
`
1706
1706
`if (max < nargs) {
`
1707
1707
`PyErr_Format(PyExc_TypeError,
`
1708
``
`-
"Function takes %s %d positional arguments"
`
``
1708
`+
"%.200s%s takes %s %d positional arguments"
`
1709
1709
`" (%d given)",
`
``
1710
`+
(fname == NULL) ? "function" : fname,
`
``
1711
`+
(fname == NULL) ? "" : "()",
`
1710
1712
` (min != INT_MAX) ? "at most" : "exactly",
`
1711
1713
`max, nargs);
`
1712
1714
`return cleanreturn(0, &freelist);
`
`@@ -1752,8 +1754,10 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1752
1754
` * or the end of the format. */
`
1753
1755
` }
`
1754
1756
`else {
`
1755
``
`-
PyErr_Format(PyExc_TypeError, "Required argument "
`
1756
``
`-
"'%s' (pos %d) not found",
`
``
1757
`+
PyErr_Format(PyExc_TypeError, "%.200s%s missing required "
`
``
1758
`+
"argument '%s' (pos %d)",
`
``
1759
`+
(fname == NULL) ? "function" : fname,
`
``
1760
`+
(fname == NULL) ? "" : "()",
`
1757
1761
`kwlist[i], i+1);
`
1758
1762
`return cleanreturn(0, &freelist);
`
1759
1763
` }
`
`@@ -1779,8 +1783,10 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1779
1783
``
1780
1784
`if (skip) {
`
1781
1785
`PyErr_Format(PyExc_TypeError,
`
1782
``
`-
"Function takes %s %d positional arguments"
`
``
1786
`+
"%.200s%s takes %s %d positional arguments"
`
1783
1787
`" (%d given)",
`
``
1788
`+
(fname == NULL) ? "function" : fname,
`
``
1789
`+
(fname == NULL) ? "" : "()",
`
1784
1790
` (Py_MIN(pos, min) < i) ? "at least" : "exactly",
`
1785
1791
`Py_MIN(pos, min), nargs);
`
1786
1792
`return cleanreturn(0, &freelist);
`
`@@ -1802,8 +1808,10 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1802
1808
`if (current_arg) {
`
1803
1809
`/* arg present in tuple and in dict */
`
1804
1810
`PyErr_Format(PyExc_TypeError,
`
1805
``
`-
"Argument given by name ('%s') "
`
``
1811
`+
"argument for %.200s%s given by name ('%s') "
`
1806
1812
`"and position (%d)",
`
``
1813
`+
(fname == NULL) ? "function" : fname,
`
``
1814
`+
(fname == NULL) ? "" : "()",
`
1807
1815
`kwlist[i], i+1);
`
1808
1816
`return cleanreturn(0, &freelist);
`
1809
1817
` }
`
`@@ -1826,8 +1834,10 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
`
1826
1834
`if (!match) {
`
1827
1835
`PyErr_Format(PyExc_TypeError,
`
1828
1836
`"'%U' is an invalid keyword "
`
1829
``
`-
"argument for this function",
`
1830
``
`-
key);
`
``
1837
`+
"argument for %.200s%s",
`
``
1838
`+
key,
`
``
1839
`+
(fname == NULL) ? "this function" : fname,
`
``
1840
`+
(fname == NULL) ? "" : "()");
`
1831
1841
`return cleanreturn(0, &freelist);
`
1832
1842
` }
`
1833
1843
` }
`
`@@ -2060,7 +2070,7 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs,
`
2060
2070
` }
`
2061
2071
`if (nargs + nkwargs > len) {
`
2062
2072
`PyErr_Format(PyExc_TypeError,
`
2063
``
`-
"%s%s takes at most %d argument%s (%zd given)",
`
``
2073
`+
"%.200s%s takes at most %d argument%s (%zd given)",
`
2064
2074
` (parser->fname == NULL) ? "function" : parser->fname,
`
2065
2075
` (parser->fname == NULL) ? "" : "()",
`
2066
2076
`len,
`
`@@ -2070,7 +2080,9 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs,
`
2070
2080
` }
`
2071
2081
`if (parser->max < nargs) {
`
2072
2082
`PyErr_Format(PyExc_TypeError,
`
2073
``
`-
"Function takes %s %d positional arguments (%d given)",
`
``
2083
`+
"%200s%s takes %s %d positional arguments (%d given)",
`
``
2084
`+
(parser->fname == NULL) ? "function" : parser->fname,
`
``
2085
`+
(parser->fname == NULL) ? "" : "()",
`
2074
2086
` (parser->min != INT_MAX) ? "at most" : "exactly",
`
2075
2087
`parser->max, nargs);
`
2076
2088
`return cleanreturn(0, &freelist);
`
`@@ -2115,15 +2127,19 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs,
`
2115
2127
`if (i < pos) {
`
2116
2128
`Py_ssize_t min = Py_MIN(pos, parser->min);
`
2117
2129
`PyErr_Format(PyExc_TypeError,
`
2118
``
`-
"Function takes %s %d positional arguments"
`
``
2130
`+
"%.200s%s takes %s %d positional arguments"
`
2119
2131
`" (%d given)",
`
``
2132
`+
(parser->fname == NULL) ? "function" : parser->fname,
`
``
2133
`+
(parser->fname == NULL) ? "" : "()",
`
2120
2134
`min < parser->max ? "at least" : "exactly",
`
2121
2135
`min, nargs);
`
2122
2136
` }
`
2123
2137
`else {
`
2124
2138
`keyword = PyTuple_GET_ITEM(kwtuple, i - pos);
`
2125
``
`-
PyErr_Format(PyExc_TypeError, "Required argument "
`
2126
``
`-
"'%U' (pos %d) not found",
`
``
2139
`+
PyErr_Format(PyExc_TypeError, "%.200s%s missing required "
`
``
2140
`+
"argument '%U' (pos %d)",
`
``
2141
`+
(parser->fname == NULL) ? "function" : parser->fname,
`
``
2142
`+
(parser->fname == NULL) ? "" : "()",
`
2127
2143
`keyword, i+1);
`
2128
2144
` }
`
2129
2145
`return cleanreturn(0, &freelist);
`
`@@ -2153,8 +2169,10 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs,
`
2153
2169
`if (current_arg) {
`
2154
2170
`/* arg present in tuple and in dict */
`
2155
2171
`PyErr_Format(PyExc_TypeError,
`
2156
``
`-
"Argument given by name ('%U') "
`
``
2172
`+
"argument for %.200s%s given by name ('%U') "
`
2157
2173
`"and position (%d)",
`
``
2174
`+
(parser->fname == NULL) ? "function" : parser->fname,
`
``
2175
`+
(parser->fname == NULL) ? "" : "()",
`
2158
2176
`keyword, i+1);
`
2159
2177
`return cleanreturn(0, &freelist);
`
2160
2178
` }
`
`@@ -2184,8 +2202,10 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs,
`
2184
2202
`if (!match) {
`
2185
2203
`PyErr_Format(PyExc_TypeError,
`
2186
2204
`"'%U' is an invalid keyword "
`
2187
``
`-
"argument for this function",
`
2188
``
`-
keyword);
`
``
2205
`+
"argument for %.200s%s",
`
``
2206
`+
keyword,
`
``
2207
`+
(parser->fname == NULL) ? "this function" : parser->fname,
`
``
2208
`+
(parser->fname == NULL) ? "" : "()");
`
2189
2209
` }
`
2190
2210
`return cleanreturn(0, &freelist);
`
2191
2211
` }
`
`@@ -2365,7 +2385,7 @@ unpack_stack(PyObject **args, Py_ssize_t nargs, const char *name,
`
2365
2385
`if (name != NULL)
`
2366
2386
`PyErr_Format(
`
2367
2387
`PyExc_TypeError,
`
2368
``
`-
"%s expected %s%zd arguments, got %zd",
`
``
2388
`+
"%.200s expected %s%zd arguments, got %zd",
`
2369
2389
`name, (min == max ? "" : "at least "), min, nargs);
`
2370
2390
`else
`
2371
2391
`PyErr_Format(
`
`@@ -2384,7 +2404,7 @@ unpack_stack(PyObject **args, Py_ssize_t nargs, const char *name,
`
2384
2404
`if (name != NULL)
`
2385
2405
`PyErr_Format(
`
2386
2406
`PyExc_TypeError,
`
2387
``
`-
"%s expected %s%zd arguments, got %zd",
`
``
2407
`+
"%.200s expected %s%zd arguments, got %zd",
`
2388
2408
`name, (min == max ? "" : "at most "), max, nargs);
`
2389
2409
`else
`
2390
2410
`PyErr_Format(
`
`@@ -2469,7 +2489,7 @@ _PyArg_NoKeywords(const char *funcname, PyObject *kwargs)
`
2469
2489
`return 1;
`
2470
2490
` }
`
2471
2491
``
2472
``
`-
PyErr_Format(PyExc_TypeError, "%s does not take keyword arguments",
`
``
2492
`+
PyErr_Format(PyExc_TypeError, "%.200s does not take keyword arguments",
`
2473
2493
`funcname);
`
2474
2494
`return 0;
`
2475
2495
`}
`
`@@ -2486,7 +2506,7 @@ _PyArg_NoStackKeywords(const char *funcname, PyObject *kwnames)
`
2486
2506
`return 1;
`
2487
2507
` }
`
2488
2508
``
2489
``
`-
PyErr_Format(PyExc_TypeError, "%s does not take keyword arguments",
`
``
2509
`+
PyErr_Format(PyExc_TypeError, "%.200s does not take keyword arguments",
`
2490
2510
`funcname);
`
2491
2511
`return 0;
`
2492
2512
`}
`
`@@ -2504,7 +2524,7 @@ _PyArg_NoPositional(const char *funcname, PyObject *args)
`
2504
2524
`if (PyTuple_GET_SIZE(args) == 0)
`
2505
2525
`return 1;
`
2506
2526
``
2507
``
`-
PyErr_Format(PyExc_TypeError, "%s does not take positional arguments",
`
``
2527
`+
PyErr_Format(PyExc_TypeError, "%.200s does not take positional arguments",
`
2508
2528
`funcname);
`
2509
2529
`return 0;
`
2510
2530
`}
`