mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Close #15486: Simplify the mechanism used to remove importlib frames from tracebacks when they just introduce irrelevant noise
This commit is contained in:
parent
73a74dad3f
commit
42c0766a53
4 changed files with 3503 additions and 3616 deletions
|
@ -1153,9 +1153,7 @@ static void
|
|||
remove_importlib_frames(void)
|
||||
{
|
||||
const char *importlib_filename = "<frozen importlib._bootstrap>";
|
||||
const char *exec_funcname = "_exec_module";
|
||||
const char *get_code_funcname = "get_code";
|
||||
const char *recursive_import = "_recursive_import";
|
||||
const char *remove_frames = "_call_with_frames_removed";
|
||||
int always_trim = 0;
|
||||
int trim_get_code = 0;
|
||||
int in_importlib = 0;
|
||||
|
@ -1163,18 +1161,8 @@ remove_importlib_frames(void)
|
|||
PyObject **prev_link, **outer_link = NULL;
|
||||
|
||||
/* Synopsis: if it's an ImportError, we trim all importlib chunks
|
||||
from the traceback. If it's a SyntaxError, we trim any chunks that
|
||||
end with a call to "get_code", We always trim chunks
|
||||
which end with a call to "_exec_module". */
|
||||
|
||||
/* Thanks to issue 15425, we also strip any chunk ending with
|
||||
* _recursive_import. This is used when making a recursive call to the
|
||||
* full import machinery which means the inner stack gets stripped early
|
||||
* and the normal heuristics won't fire properly for outer frames. A
|
||||
* more elegant mechanism would be nice, as this one can misfire if
|
||||
* builtins.__import__ has been replaced with a custom implementation.
|
||||
* However, the current approach at least gets the job done.
|
||||
*/
|
||||
from the traceback. We always trim chunks
|
||||
which end with a call to "_call_with_frames_removed". */
|
||||
|
||||
PyErr_Fetch(&exception, &value, &base_tb);
|
||||
if (!exception || Py_VerboseFlag)
|
||||
|
@ -1207,14 +1195,8 @@ remove_importlib_frames(void)
|
|||
|
||||
if (in_importlib &&
|
||||
(always_trim ||
|
||||
(PyUnicode_CompareWithASCIIString(code->co_name,
|
||||
exec_funcname) == 0) ||
|
||||
(PyUnicode_CompareWithASCIIString(code->co_name,
|
||||
recursive_import) == 0) ||
|
||||
(trim_get_code &&
|
||||
PyUnicode_CompareWithASCIIString(code->co_name,
|
||||
get_code_funcname) == 0)
|
||||
)) {
|
||||
PyUnicode_CompareWithASCIIString(code->co_name,
|
||||
remove_frames) == 0)) {
|
||||
PyObject *tmp = *outer_link;
|
||||
*outer_link = next;
|
||||
Py_XINCREF(next);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue