mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
bpo-32932: More revealing error message when non-str objects in __all__ (GH-5848)
This commit is contained in:
parent
5cbb84106e
commit
d8b291a742
3 changed files with 49 additions and 1 deletions
|
@ -4837,6 +4837,7 @@ import_all_from(PyObject *locals, PyObject *v)
|
|||
{
|
||||
_Py_IDENTIFIER(__all__);
|
||||
_Py_IDENTIFIER(__dict__);
|
||||
_Py_IDENTIFIER(__name__);
|
||||
PyObject *all, *dict, *name, *value;
|
||||
int skip_leading_underscores = 0;
|
||||
int pos, err;
|
||||
|
@ -4869,7 +4870,32 @@ import_all_from(PyObject *locals, PyObject *v)
|
|||
PyErr_Clear();
|
||||
break;
|
||||
}
|
||||
if (skip_leading_underscores && PyUnicode_Check(name)) {
|
||||
if (!PyUnicode_Check(name)) {
|
||||
PyObject *modname = _PyObject_GetAttrId(v, &PyId___name__);
|
||||
if (modname == NULL) {
|
||||
Py_DECREF(name);
|
||||
err = -1;
|
||||
break;
|
||||
}
|
||||
if (!PyUnicode_Check(modname)) {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"module __name__ must be a string, not %.100s",
|
||||
Py_TYPE(modname)->tp_name);
|
||||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"%s in %U.%s must be str, not %.100s",
|
||||
skip_leading_underscores ? "Key" : "Item",
|
||||
modname,
|
||||
skip_leading_underscores ? "__dict__" : "__all__",
|
||||
Py_TYPE(name)->tp_name);
|
||||
}
|
||||
Py_DECREF(modname);
|
||||
Py_DECREF(name);
|
||||
err = -1;
|
||||
break;
|
||||
}
|
||||
if (skip_leading_underscores) {
|
||||
if (PyUnicode_READY(name) == -1) {
|
||||
Py_DECREF(name);
|
||||
err = -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue