From 65366bc8bdc4716ebc361e622590b45a6e5aef07 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 9 Sep 2019 08:17:50 -0700 Subject: bpo-20490: Improve circular import error message (GH-15308) --- Python/ceval.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'Python/ceval.c') diff --git a/Python/ceval.c b/Python/ceval.c index f9e03b3097..d280d79776 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -5233,10 +5233,17 @@ import_from(PyThreadState *tstate, PyObject *v, PyObject *name) PyErr_SetImportError(errmsg, pkgname, NULL); } else { - errmsg = PyUnicode_FromFormat( - "cannot import name %R from %R (%S)", - name, pkgname_or_unknown, pkgpath - ); + _Py_IDENTIFIER(__spec__); + PyObject *spec = _PyObject_GetAttrId(v, &PyId___spec__); + Py_XINCREF(spec); + const char *fmt = + _PyModuleSpec_IsInitializing(spec) ? + "cannot import name %R from partially initialized module %R " + "(most likely due to a circular import) (%S)" : + "cannot import name %R from %R (%S)"; + Py_XDECREF(spec); + + errmsg = PyUnicode_FromFormat(fmt, name, pkgname_or_unknown, pkgpath); /* NULL checks for errmsg and pkgname done by PyErr_SetImportError. */ PyErr_SetImportError(errmsg, pkgname, pkgpath); } -- cgit v1.2.1