RuntimeError: maximum recursion depth exceeded?
-
I ran into an issue that doesn't look like the error I'm seeing. The traceback from the error has 19 calls. There is no recursion.
I did this to duplicate real infinite recursion:
>>> def foo(): ... blah() ... >>> >>> def blah(): ... foo() ... >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah File "<stdin>", line 2, in foo File "<stdin>", line 2, in blah RuntimeError: maximum recursion depth exceeded
Is there a way to easily expand this limitation?
References that aren't quite what I'm facing:
• https://github.com/micropython/micropython/issues/1050
• https://forum.micropython.org/viewtopic.php?t=2922And of course,
sys.setrecursionlimit(50)
yieldsAttributeError: 'module' object has no attribute 'setrecursionlimit'
-
Quick update. In esp32/mptask.h there exists:
#define MICROPY_TASK_PRIORITY MP_THREAD_PRIORITY #define MICROPY_TASK_STACK_SIZE (8 * 1024) #define MICROPY_TASK_STACK_SIZE_PSRAM (12 * 1024) #define MICROPY_TASK_STACK_LEN (MICROPY_TASK_STACK_SIZE / sizeof(StackType_t))
I believe this is where we could increase the stack size, but I am unsure of the sanity and practicality of this...
Thoughts?
-
@johand Sorry for not being clearer in my original post. Forget the code I posted because that was just a different way to show the same error I was seeing in my real codebase. I didn't want to go through the trouble of sanitizing the text in the real call stack - so I wrote something that just called each other and that elicited the same error "maximum recursion depth exceeded."
My question is simply: Assuming the maximum recursion depth is hard-coded somewhere... where is it, and how can I increase it slightly?
-
When you call a function there is a reference to the calling code (to know where to continue when the called function ends), so in this case you get a list (stack) with unlimited number of references.
Why don´t you do something like this?
while True: foo()
Johan