@@ -4995,7 +4995,7 @@ import_from(PyObject *v, PyObject *name)
49954995{
49964996 PyObject * x ;
49974997 _Py_IDENTIFIER (__name__ );
4998- PyObject * fullmodname , * pkgname , * pkgpath ;
4998+ PyObject * fullmodname , * pkgname , * pkgpath , * pkgname_or_unknown ;
49994999
50005000 x = PyObject_GetAttr (v , name );
50015001 if (x != NULL || !PyErr_ExceptionMatches (PyExc_AttributeError ))
@@ -5009,7 +5009,6 @@ import_from(PyObject *v, PyObject *name)
50095009 goto error ;
50105010 }
50115011 fullmodname = PyUnicode_FromFormat ("%U.%U" , pkgname , name );
5012- Py_DECREF (pkgname );
50135012 if (fullmodname == NULL ) {
50145013 return NULL ;
50155014 }
@@ -5018,18 +5017,36 @@ import_from(PyObject *v, PyObject *name)
50185017 if (x == NULL ) {
50195018 goto error ;
50205019 }
5020+ Py_DECREF (pkgname );
50215021 Py_INCREF (x );
50225022 return x ;
50235023 error :
50245024 pkgpath = PyModule_GetFilenameObject (v );
5025+ if (pkgname == NULL ) {
5026+ pkgname_or_unknown = PyUnicode_FromString ("<unknown module name>" );
5027+ if (pkgname_or_unknown == NULL ) {
5028+ Py_XDECREF (pkgpath );
5029+ return NULL ;
5030+ }
5031+ } else {
5032+ pkgname_or_unknown = pkgname ;
5033+ }
50255034
50265035 if (pkgpath == NULL || !PyUnicode_Check (pkgpath )) {
50275036 PyErr_Clear ();
5028- PyErr_SetImportError (PyUnicode_FromFormat ("cannot import name %R" , name ), pkgname , NULL );
5037+ PyErr_SetImportError (
5038+ PyUnicode_FromFormat ("cannot import name %R from %R (unknown location)" ,
5039+ name , pkgname_or_unknown ),
5040+ pkgname , NULL );
50295041 } else {
5030- PyErr_SetImportError (PyUnicode_FromFormat ("cannot import name %R" , name ), pkgname , pkgpath );
5042+ PyErr_SetImportError (
5043+ PyUnicode_FromFormat ("cannot import name %R from %R (%S)" ,
5044+ name , pkgname_or_unknown , pkgpath ),
5045+ pkgname , pkgpath );
50315046 }
50325047
5048+ Py_XDECREF (pkgname_or_unknown );
5049+ Py_XDECREF (pkgpath );
50335050 return NULL ;
50345051}
50355052
0 commit comments