Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Error in AST recursion depth tracking change of gh-95185 #106905

Closed
Assignees
gpsheadpablogsal
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error
@mmohrhard

Description

@mmohrhard

Bug report

The change in0047447 seems to miss the recusrion depth adjustment in case of an error. As an example for some of the generated code:

PyObject*ast2obj_mod(struct ast_state *state, void* _o){    mod_ty o = (mod_ty)_o;    PyObject *result = NULL, *value = NULL;    PyTypeObject *tp;    if (!o) {        Py_RETURN_NONE;    }    if (++state->recursion_depth > state->recursion_limit) {        PyErr_SetString(PyExc_RecursionError,            "maximum recursion depth exceeded during ast construction");        return 0;    }    switch (o->kind) {    case Module_kind:        tp = (PyTypeObject *)state->Module_type;        result = PyType_GenericNew(tp, NULL, NULL);        if (!result) goto failed;        value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);        if (!value) goto failed;        if (PyObject_SetAttr(result, state->body, value) == -1)            goto failed;...    }    state->recursion_depth--;    return result;failed:    Py_XDECREF(value);            Py_XDECREF(result);            return NULL;}

Note that thefailed code path is missing thestate->recursion_depth--; statement.

I found this as I'm trying to track down where spuriousSystemError: AST constructor recursion depth mismatch errors in Python 3.11 are coming from. E.g.

  File "/env/lib/python3.11/site-packages/bloscpack/numpy_io.py", line 358, in unpack_ndarray_from_bytes    return unpack_ndarray(source)      ^^^^^^^^^^^^^^^^^  File "/env/lib/python3.11/site-packages/bloscpack/numpy_io.py", line 305, in unpack_ndarray    sink = PlainNumpySink(source.metadata)      ^^^^^^^^^^^^^^^^^  File "/env/lib/python3.11/site-packages/bloscpack/numpy_io.py", line 136, in __init__    dtype_ = ast.literal_eval(metadata['dtype'])    ^^^^^^^^^^^^^^^^^  File "/env/lib/python3.11/ast.py", line 64, in literal_eval    node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')    ^^^^^^^^^^^^^^^^^  File "/env/lib/python3.11/ast.py", line 50, in parse    return compile(source, filename, mode, flags,      ^^^^^^^^^^^^^^^^^SystemError: AST constructor recursion depth mismatch (before=48, after=47)

Your environment

Reproduced in Python 3.11 but the code in main looks the same.

Linked PRs

Metadata

Metadata

Labels

interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp