mirror of
https://github.com/python/cpython.git
synced 2025-07-19 09:15:34 +00:00
gh-127651: Use __file__ in diagnostics if origin is missing (#127660)
See the left hand side in https://github.com/python/cpython/pull/123929/files#diff-c22186367cbe20233e843261998dc027ae5f1f8c0d2e778abfa454ae74cc59deL2840-L2849
---------
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
(cherry picked from commit 3983527c3a
)
This commit is contained in:
parent
310efdabf5
commit
6441d42f92
3 changed files with 66 additions and 5 deletions
|
@ -2785,6 +2785,20 @@ import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
|
|||
}
|
||||
}
|
||||
|
||||
if (origin == NULL) {
|
||||
// Fall back to __file__ for diagnostics if we don't have
|
||||
// an origin that is a location
|
||||
origin = PyModule_GetFilenameObject(v);
|
||||
if (origin == NULL) {
|
||||
if (!PyErr_ExceptionMatches(PyExc_SystemError)) {
|
||||
goto done;
|
||||
}
|
||||
// PyModule_GetFilenameObject raised "module filename missing"
|
||||
_PyErr_Clear(tstate);
|
||||
}
|
||||
assert(origin == NULL || PyUnicode_Check(origin));
|
||||
}
|
||||
|
||||
if (is_possibly_shadowing_stdlib) {
|
||||
assert(origin);
|
||||
errmsg = PyUnicode_FromFormat(
|
||||
|
@ -2845,9 +2859,11 @@ import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
|
|||
}
|
||||
|
||||
done_with_errmsg:
|
||||
/* NULL checks for errmsg, mod_name, origin done by PyErr_SetImportError. */
|
||||
_PyErr_SetImportErrorWithNameFrom(errmsg, mod_name, origin, name);
|
||||
Py_DECREF(errmsg);
|
||||
if (errmsg != NULL) {
|
||||
/* NULL checks for mod_name and origin done by _PyErr_SetImportErrorWithNameFrom */
|
||||
_PyErr_SetImportErrorWithNameFrom(errmsg, mod_name, origin, name);
|
||||
Py_DECREF(errmsg);
|
||||
}
|
||||
|
||||
done:
|
||||
Py_XDECREF(origin);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue