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

`}

`