如何解决以下代码中的“达到最大递归深度”错误?

时间:2019-02-08 14:21:56

标签: python json tail-recursion

我已经用python编写了执行以下操作的脚本:

  1. 采用文件夹路径作为输入,其中可能包含许多带有.json文件的子目录
  2. 从所有文件夹中依次加载.json文件,并逐行读取每个文件,将其解析为键,值列表,然后写入excel文件。

当我从命令提示符下运行该脚本时,该脚本可以正常工作。但我想将其作为可执行文件共享给我的团队,我已经使用pyinstaller将其转换为exe。那就是我遇到错误

  

RecursionError:超过最大递归深度

我发现该错误是由于尾递归的函数引起的。我是python的新手,所以发现很难重写此函数。请提出重写此尾递归函数的方法。

import json
import codecs
import itertools
import os
import sys
from time import sleep
from datetime import datetime
import dateutil.parser
from openpyxl import Workbook

def load_json_from_directories(root_path, cur_path, asset_code):
    for filename in os.listdir(cur_path):
        if os.path.isfile(os.path.join(cur_path, filename)):
            if os.path.splitext(filename)[1] == '.json':
                print('Processing...'+filename)
                load_json_line(os.path.join(cur_path, filename), asset_code)
            else:
                print('Not a json file! Skipping...'+filename)
        elif os.path.isdir(os.path.join(cur_path, filename)):
            load_json_from_directories(root_path, os.path.join(cur_path, filename), asset_code)
        else:
            sys.exit("Should never reach here.")

1 个答案:

答案 0 :(得分:0)

您可以使用现有功能,而不是手动执行此操作:

from pathlib import Path

for json_path in Path('.').glob('**/*.json'):
    # code to handle jsons here
    print(json_path)