summaryrefslogtreecommitdiffstats
path: root/Modules/clinic
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-05-28 09:01:37 (GMT)
committerGitHub <noreply@github.com>2024-05-28 09:01:37 (GMT)
commitb313cc68d50de5fb5f43acffd402c5c4da6516fc (patch)
tree3d25305bb921d8e3748db524ec9267e65ecb242f /Modules/clinic
parentbf08f0a5fe5750904aa4a239945db16d2c43f6e7 (diff)
downloadcpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.zip
cpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.tar.gz
cpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.tar.bz2
gh-117557: Improve error messages when a string, bytes or bytearray of length 1 are expected (GH-117631)
Diffstat (limited to 'Modules/clinic')
-rw-r--r--Modules/clinic/_testclinic.c.h259
-rw-r--r--Modules/clinic/arraymodule.c.h7
-rw-r--r--Modules/clinic/unicodedata.c.h52
3 files changed, 275 insertions, 43 deletions
diff --git a/Modules/clinic/_testclinic.c.h b/Modules/clinic/_testclinic.c.h
index 6a59baa..16e7c80 100644
--- a/Modules/clinic/_testclinic.c.h
+++ b/Modules/clinic/_testclinic.c.h
@@ -234,10 +234,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 1) {
goto skip_optional;
}
- if (PyBytes_Check(args[0]) && PyBytes_GET_SIZE(args[0]) == 1) {
+ if (PyBytes_Check(args[0])) {
+ if (PyBytes_GET_SIZE(args[0]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 1 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[0]));
+ goto exit;
+ }
a = PyBytes_AS_STRING(args[0])[0];
}
- else if (PyByteArray_Check(args[0]) && PyByteArray_GET_SIZE(args[0]) == 1) {
+ else if (PyByteArray_Check(args[0])) {
+ if (PyByteArray_GET_SIZE(args[0]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 1 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[0]));
+ goto exit;
+ }
a = PyByteArray_AS_STRING(args[0])[0];
}
else {
@@ -247,10 +261,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 2) {
goto skip_optional;
}
- if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
+ if (PyBytes_Check(args[1])) {
+ if (PyBytes_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 2 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[1]));
+ goto exit;
+ }
b = PyBytes_AS_STRING(args[1])[0];
}
- else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
+ else if (PyByteArray_Check(args[1])) {
+ if (PyByteArray_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 2 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[1]));
+ goto exit;
+ }
b = PyByteArray_AS_STRING(args[1])[0];
}
else {
@@ -260,10 +288,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 3) {
goto skip_optional;
}
- if (PyBytes_Check(args[2]) && PyBytes_GET_SIZE(args[2]) == 1) {
+ if (PyBytes_Check(args[2])) {
+ if (PyBytes_GET_SIZE(args[2]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 3 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[2]));
+ goto exit;
+ }
c = PyBytes_AS_STRING(args[2])[0];
}
- else if (PyByteArray_Check(args[2]) && PyByteArray_GET_SIZE(args[2]) == 1) {
+ else if (PyByteArray_Check(args[2])) {
+ if (PyByteArray_GET_SIZE(args[2]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 3 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[2]));
+ goto exit;
+ }
c = PyByteArray_AS_STRING(args[2])[0];
}
else {
@@ -273,10 +315,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 4) {
goto skip_optional;
}
- if (PyBytes_Check(args[3]) && PyBytes_GET_SIZE(args[3]) == 1) {
+ if (PyBytes_Check(args[3])) {
+ if (PyBytes_GET_SIZE(args[3]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 4 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[3]));
+ goto exit;
+ }
d = PyBytes_AS_STRING(args[3])[0];
}
- else if (PyByteArray_Check(args[3]) && PyByteArray_GET_SIZE(args[3]) == 1) {
+ else if (PyByteArray_Check(args[3])) {
+ if (PyByteArray_GET_SIZE(args[3]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 4 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[3]));
+ goto exit;
+ }
d = PyByteArray_AS_STRING(args[3])[0];
}
else {
@@ -286,10 +342,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 5) {
goto skip_optional;
}
- if (PyBytes_Check(args[4]) && PyBytes_GET_SIZE(args[4]) == 1) {
+ if (PyBytes_Check(args[4])) {
+ if (PyBytes_GET_SIZE(args[4]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 5 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[4]));
+ goto exit;
+ }
e = PyBytes_AS_STRING(args[4])[0];
}
- else if (PyByteArray_Check(args[4]) && PyByteArray_GET_SIZE(args[4]) == 1) {
+ else if (PyByteArray_Check(args[4])) {
+ if (PyByteArray_GET_SIZE(args[4]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 5 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[4]));
+ goto exit;
+ }
e = PyByteArray_AS_STRING(args[4])[0];
}
else {
@@ -299,10 +369,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 6) {
goto skip_optional;
}
- if (PyBytes_Check(args[5]) && PyBytes_GET_SIZE(args[5]) == 1) {
+ if (PyBytes_Check(args[5])) {
+ if (PyBytes_GET_SIZE(args[5]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 6 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[5]));
+ goto exit;
+ }
f = PyBytes_AS_STRING(args[5])[0];
}
- else if (PyByteArray_Check(args[5]) && PyByteArray_GET_SIZE(args[5]) == 1) {
+ else if (PyByteArray_Check(args[5])) {
+ if (PyByteArray_GET_SIZE(args[5]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 6 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[5]));
+ goto exit;
+ }
f = PyByteArray_AS_STRING(args[5])[0];
}
else {
@@ -312,10 +396,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 7) {
goto skip_optional;
}
- if (PyBytes_Check(args[6]) && PyBytes_GET_SIZE(args[6]) == 1) {
+ if (PyBytes_Check(args[6])) {
+ if (PyBytes_GET_SIZE(args[6]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 7 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[6]));
+ goto exit;
+ }
g = PyBytes_AS_STRING(args[6])[0];
}
- else if (PyByteArray_Check(args[6]) && PyByteArray_GET_SIZE(args[6]) == 1) {
+ else if (PyByteArray_Check(args[6])) {
+ if (PyByteArray_GET_SIZE(args[6]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 7 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[6]));
+ goto exit;
+ }
g = PyByteArray_AS_STRING(args[6])[0];
}
else {
@@ -325,10 +423,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 8) {
goto skip_optional;
}
- if (PyBytes_Check(args[7]) && PyBytes_GET_SIZE(args[7]) == 1) {
+ if (PyBytes_Check(args[7])) {
+ if (PyBytes_GET_SIZE(args[7]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 8 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[7]));
+ goto exit;
+ }
h = PyBytes_AS_STRING(args[7])[0];
}
- else if (PyByteArray_Check(args[7]) && PyByteArray_GET_SIZE(args[7]) == 1) {
+ else if (PyByteArray_Check(args[7])) {
+ if (PyByteArray_GET_SIZE(args[7]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 8 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[7]));
+ goto exit;
+ }
h = PyByteArray_AS_STRING(args[7])[0];
}
else {
@@ -338,10 +450,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 9) {
goto skip_optional;
}
- if (PyBytes_Check(args[8]) && PyBytes_GET_SIZE(args[8]) == 1) {
+ if (PyBytes_Check(args[8])) {
+ if (PyBytes_GET_SIZE(args[8]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 9 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[8]));
+ goto exit;
+ }
i = PyBytes_AS_STRING(args[8])[0];
}
- else if (PyByteArray_Check(args[8]) && PyByteArray_GET_SIZE(args[8]) == 1) {
+ else if (PyByteArray_Check(args[8])) {
+ if (PyByteArray_GET_SIZE(args[8]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 9 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[8]));
+ goto exit;
+ }
i = PyByteArray_AS_STRING(args[8])[0];
}
else {
@@ -351,10 +477,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 10) {
goto skip_optional;
}
- if (PyBytes_Check(args[9]) && PyBytes_GET_SIZE(args[9]) == 1) {
+ if (PyBytes_Check(args[9])) {
+ if (PyBytes_GET_SIZE(args[9]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 10 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[9]));
+ goto exit;
+ }
j = PyBytes_AS_STRING(args[9])[0];
}
- else if (PyByteArray_Check(args[9]) && PyByteArray_GET_SIZE(args[9]) == 1) {
+ else if (PyByteArray_Check(args[9])) {
+ if (PyByteArray_GET_SIZE(args[9]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 10 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[9]));
+ goto exit;
+ }
j = PyByteArray_AS_STRING(args[9])[0];
}
else {
@@ -364,10 +504,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 11) {
goto skip_optional;
}
- if (PyBytes_Check(args[10]) && PyBytes_GET_SIZE(args[10]) == 1) {
+ if (PyBytes_Check(args[10])) {
+ if (PyBytes_GET_SIZE(args[10]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 11 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[10]));
+ goto exit;
+ }
k = PyBytes_AS_STRING(args[10])[0];
}
- else if (PyByteArray_Check(args[10]) && PyByteArray_GET_SIZE(args[10]) == 1) {
+ else if (PyByteArray_Check(args[10])) {
+ if (PyByteArray_GET_SIZE(args[10]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 11 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[10]));
+ goto exit;
+ }
k = PyByteArray_AS_STRING(args[10])[0];
}
else {
@@ -377,10 +531,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 12) {
goto skip_optional;
}
- if (PyBytes_Check(args[11]) && PyBytes_GET_SIZE(args[11]) == 1) {
+ if (PyBytes_Check(args[11])) {
+ if (PyBytes_GET_SIZE(args[11]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 12 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[11]));
+ goto exit;
+ }
l = PyBytes_AS_STRING(args[11])[0];
}
- else if (PyByteArray_Check(args[11]) && PyByteArray_GET_SIZE(args[11]) == 1) {
+ else if (PyByteArray_Check(args[11])) {
+ if (PyByteArray_GET_SIZE(args[11]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 12 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[11]));
+ goto exit;
+ }
l = PyByteArray_AS_STRING(args[11])[0];
}
else {
@@ -390,10 +558,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 13) {
goto skip_optional;
}
- if (PyBytes_Check(args[12]) && PyBytes_GET_SIZE(args[12]) == 1) {
+ if (PyBytes_Check(args[12])) {
+ if (PyBytes_GET_SIZE(args[12]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 13 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[12]));
+ goto exit;
+ }
m = PyBytes_AS_STRING(args[12])[0];
}
- else if (PyByteArray_Check(args[12]) && PyByteArray_GET_SIZE(args[12]) == 1) {
+ else if (PyByteArray_Check(args[12])) {
+ if (PyByteArray_GET_SIZE(args[12]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 13 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[12]));
+ goto exit;
+ }
m = PyByteArray_AS_STRING(args[12])[0];
}
else {
@@ -403,10 +585,24 @@ char_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 14) {
goto skip_optional;
}
- if (PyBytes_Check(args[13]) && PyBytes_GET_SIZE(args[13]) == 1) {
+ if (PyBytes_Check(args[13])) {
+ if (PyBytes_GET_SIZE(args[13]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 14 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[13]));
+ goto exit;
+ }
n = PyBytes_AS_STRING(args[13])[0];
}
- else if (PyByteArray_Check(args[13]) && PyByteArray_GET_SIZE(args[13]) == 1) {
+ else if (PyByteArray_Check(args[13])) {
+ if (PyByteArray_GET_SIZE(args[13]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "char_converter(): argument 14 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[13]));
+ goto exit;
+ }
n = PyByteArray_AS_STRING(args[13])[0];
}
else {
@@ -648,7 +844,10 @@ int_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
if (PyUnicode_GET_LENGTH(args[2]) != 1) {
- _PyArg_BadArgument("int_converter", "argument 3", "a unicode character", args[2]);
+ PyErr_Format(PyExc_TypeError,
+ "int_converter(): argument 3 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[2]));
goto exit;
}
c = PyUnicode_READ_CHAR(args[2], 0);
@@ -3219,4 +3418,4 @@ _testclinic_TestClass_get_defining_class_arg(PyObject *self, PyTypeObject *cls,
exit:
return return_value;
}
-/*[clinic end generated code: output=aa352c3a67300056 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=545d409a47f1826d input=a9049054013a1b77]*/
diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h
index 60a03fe..8427f92 100644
--- a/Modules/clinic/arraymodule.c.h
+++ b/Modules/clinic/arraymodule.c.h
@@ -596,7 +596,10 @@ array__array_reconstructor(PyObject *module, PyObject *const *args, Py_ssize_t n
goto exit;
}
if (PyUnicode_GET_LENGTH(args[1]) != 1) {
- _PyArg_BadArgument("_array_reconstructor", "argument 2", "a unicode character", args[1]);
+ PyErr_Format(PyExc_TypeError,
+ "_array_reconstructor(): argument 2 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[1]));
goto exit;
}
typecode = PyUnicode_READ_CHAR(args[1], 0);
@@ -685,4 +688,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__,
#define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \
{"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
-/*[clinic end generated code: output=52c55d9b1d026c1c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9a3276ffd499c796 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h
index 739f498..345440e 100644
--- a/Modules/clinic/unicodedata.c.h
+++ b/Modules/clinic/unicodedata.c.h
@@ -36,7 +36,10 @@ unicodedata_UCD_decimal(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
if (PyUnicode_GET_LENGTH(args[0]) != 1) {
- _PyArg_BadArgument("decimal", "argument 1", "a unicode character", args[0]);
+ PyErr_Format(PyExc_TypeError,
+ "decimal(): argument 1 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[0]));
goto exit;
}
chr = PyUnicode_READ_CHAR(args[0], 0);
@@ -82,7 +85,10 @@ unicodedata_UCD_digit(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
if (PyUnicode_GET_LENGTH(args[0]) != 1) {
- _PyArg_BadArgument("digit", "argument 1", "a unicode character", args[0]);
+ PyErr_Format(PyExc_TypeError,
+ "digit(): argument 1 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[0]));
goto exit;
}
chr = PyUnicode_READ_CHAR(args[0], 0);
@@ -129,7 +135,10 @@ unicodedata_UCD_numeric(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
if (PyUnicode_GET_LENGTH(args[0]) != 1) {
- _PyArg_BadArgument("numeric", "argument 1", "a unicode character", args[0]);
+ PyErr_Format(PyExc_TypeError,
+ "numeric(): argument 1 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[0]));
goto exit;
}
chr = PyUnicode_READ_CHAR(args[0], 0);
@@ -167,7 +176,10 @@ unicodedata_UCD_category(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("category", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "category(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -202,7 +214,10 @@ unicodedata_UCD_bidirectional(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("bidirectional", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "bidirectional(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -238,7 +253,10 @@ unicodedata_UCD_combining(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("combining", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "combining(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -279,7 +297,10 @@ unicodedata_UCD_mirrored(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("mirrored", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "mirrored(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -316,7 +337,10 @@ unicodedata_UCD_east_asian_width(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("east_asian_width", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "east_asian_width(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -351,7 +375,10 @@ unicodedata_UCD_decomposition(PyObject *self, PyObject *arg)
goto exit;
}
if (PyUnicode_GET_LENGTH(arg) != 1) {
- _PyArg_BadArgument("decomposition", "argument", "a unicode character", arg);
+ PyErr_Format(PyExc_TypeError,
+ "decomposition(): argument must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(arg));
goto exit;
}
chr = PyUnicode_READ_CHAR(arg, 0);
@@ -473,7 +500,10 @@ unicodedata_UCD_name(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
if (PyUnicode_GET_LENGTH(args[0]) != 1) {
- _PyArg_BadArgument("name", "argument 1", "a unicode character", args[0]);
+ PyErr_Format(PyExc_TypeError,
+ "name(): argument 1 must be a unicode character, "
+ "not a string of length %zd",
+ PyUnicode_GET_LENGTH(args[0]));
goto exit;
}
chr = PyUnicode_READ_CHAR(args[0], 0);
@@ -519,4 +549,4 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg)
exit:
return return_value;
}
-/*[clinic end generated code: output=ea30f89007b2bfff input=a9049054013a1b77]*/
+/*[clinic end generated code: output=8a59d430cee41058 input=a9049054013a1b77]*/