[Python-checkins] cpython (merge 3.5 -> default): Issue #26198: Fixed error messages for some argument parsing errors.
serhiy.storchaka
python-checkins at python.org
Sun Feb 7 18:23:19 EST 2016
https://hg.python.org/cpython/rev/f8bdc0ea3bcf
changeset: 100179:f8bdc0ea3bcf
parent: 100176:7fea2cebc604
parent: 100178:9f998e24d8d8
user: Serhiy Storchaka <storchaka at gmail.com>
date: Mon Feb 08 01:20:21 2016 +0200
summary:
Issue #26198: Fixed error messages for some argument parsing errors.
files:
Lib/test/test_capi.py | 2 +-
Python/getargs.c | 32 +++++++++++++++++++-----------
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -489,7 +489,7 @@
format.encode("ascii"), keywords)
when_not_skipped = False
except TypeError as e:
- s = "argument 1 must be impossible<bad format char>, not int"
+ s = "argument 1 (impossible<bad format char>)"
when_not_skipped = (str(e) == s)
except RuntimeError as e:
when_not_skipped = False
diff --git a/Python/getargs.c b/Python/getargs.c
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -342,7 +342,7 @@
flags, levels, msgbuf,
sizeof(msgbuf), &freelist);
if (msg) {
- seterror(i+1, msg, levels, fname, msg);
+ seterror(i+1, msg, levels, fname, message);
return cleanreturn(0, &freelist);
}
}
@@ -535,9 +535,15 @@
{
assert(expected != NULL);
assert(arg != NULL);
- PyOS_snprintf(msgbuf, bufsize,
- "must be %.50s, not %.50s", expected,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ if (expected[0] == '(') {
+ PyOS_snprintf(msgbuf, bufsize,
+ "%.100s", expected);
+ }
+ else {
+ PyOS_snprintf(msgbuf, bufsize,
+ "must be %.50s, not %.50s", expected,
+ arg == Py_None ? "None" : arg->ob_type->tp_name);
+ }
return msgbuf;
}
@@ -741,7 +747,7 @@
if (PyLong_Check(arg))
ival = PyLong_AsUnsignedLongMask(arg);
else
- return converterr("integer<k>", arg, msgbuf, bufsize);
+ return converterr("int", arg, msgbuf, bufsize);
*p = ival;
break;
}
@@ -766,7 +772,7 @@
if (PyLong_Check(arg))
ival = PyLong_AsUnsignedLongLongMask(arg);
else
- return converterr("integer<K>", arg, msgbuf, bufsize);
+ return converterr("int", arg, msgbuf, bufsize);
*p = ival;
break;
}
@@ -1123,9 +1129,11 @@
} else {
if (size + 1 > BUFFER_LEN) {
Py_DECREF(s);
- return converterr(
- "(buffer overflow)",
- arg, msgbuf, bufsize);
+ PyErr_Format(PyExc_TypeError,
+ "encoded string too long "
+ "(%zd, maximum length %zd)",
+ (Py_ssize_t)size, (Py_ssize_t)(BUFFER_LEN-1));
+ RETURN_ERR_OCCURRED;
}
}
memcpy(*buffer, ptr, size+1);
@@ -1147,7 +1155,7 @@
if ((Py_ssize_t)strlen(ptr) != size) {
Py_DECREF(s);
return converterr(
- "encoded string without NULL bytes",
+ "encoded string without null bytes",
arg, msgbuf, bufsize);
}
*buffer = PyMem_NEW(char, size + 1);
@@ -1237,7 +1245,7 @@
if (*format != '*')
return converterr(
- "invalid use of 'w' format character",
+ "(invalid use of 'w' format character)",
arg, msgbuf, bufsize);
format++;
@@ -1261,7 +1269,7 @@
}
default:
- return converterr("impossible<bad format char>", arg, msgbuf, bufsize);
+ return converterr("(impossible<bad format char>)", arg, msgbuf, bufsize);
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list