Превышена максимальная глубина рекурсии в простом цикле - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь создать довольно простой l oop, который сортирует около 900 вложенных словарей и возвращает все значения в списках, названных в честь ключей. Однако я получаю следующую ошибку рекурсии:

    Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "<stdin>", line 4, in myprint
  File "<stdin>", line 4, in myprint
  File "<stdin>", line 4, in myprint
  [Previous line repeated 995 more times]
  File "<stdin>", line 2, in myprint
RecursionError: maximum recursion depth exceeded while calling a Python object

Вот код, который я сейчас использую:

import pandas as pd
df = pd.read_csv("/Users/--/--/--/--/--/.csv")
def myprint(d):
    for k, v in data.items():
            if isinstance(v, dict):
                myprint(v)
            else:
                print("{0} : {1}".format(k, v))
                setattr(sys.modules[__name__], k, [v])
            
            
for i in df['file_num']:
    with open("/Users/--/--/--/--/allDAFs{}.json".format(i)) as f:
        data=json.load(f)
    myprint(data)

Я был бы очень признателен за любое потенциальное понимание того, как это можно исправить или работал. Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Проблема в том, что l oop for k, v in data.items(): вызывается каждый раз, когда вы вызываете функцию.

Я думаю, вы допустили опечатку data.items вместо d.items

import pandas as pd
df = pd.read_csv("/Users/--/--/--/--/--/.csv")
import pandas as pd
df = pd.read_csv("/Users/--/--/--/--/--/.csv")
def myprint(d):
#   for k, v in data.items():
    for k, v in d.items():
            if isinstance(v, dict):
                myprint(v)
            else:
                print("{0} : {1}".format(k, v))
                setattr(sys.modules[__name__], k, [v])
            
            
for i in df['file_num']:
    with open("/Users/--/--/--/--/allDAFs{}.json".format(i)) as f:
        data=json.load(f)
    myprint(data)
0 голосов
/ 05 августа 2020

проверьте, работает ли ваша программа для одной рекурсии. тогда, если вы хотите увеличить лимит рекурсии, вы можете сделать это

sys.setrecursionlimit(2000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...