RecursionError:比较中超出了最大递归深度'

Posted

技术标签:

【中文标题】RecursionError:比较中超出了最大递归深度\'【英文标题】:RecursionError: maximum recursion depth exceeded in comparison'RecursionError:比较中超出了最大递归深度' 【发布时间】:2020-05-19 12:12:43 【问题描述】:

在我的 Python 脚本中,我确定了 Azure Datalake 存储 Gen2 中的目录大小。 在我检查更大的目录之前,代码可以正常工作。

import sys
from dbutils import FileInfo
from typing import List

sys.setrecursionlimit(2000)
root_path = "/mnt/datalake/.../"

def discover_size(path: str, verbose: bool = True):
  def loop_path(paths: List[FileInfo], accum_size: float):
    if not paths:
      return accum_size
    else:
      head, tail = paths[0], paths[1:]
      if head.size > 0:
        if verbose:
          accum_size += head.size / 1e6
        return loop_path(tail, accum_size)
      else:
        extended_tail = dbutils.fs.ls(head.path) + tail
        return loop_path(extended_tail, accum_size)

  return loop_path(dbutils.fs.ls(path), 0.0)

discover_size(root_path, verbose=True) 

首先查看OOM(Out of Memory)问题并添加

sys.setrecursionlimit(2000)

现在,另一个错误-

RecursionError: maximum recursion depth exceeded in comparison

如何解决这个问题。

【问题讨论】:

向我们展示您的代码。您的代码中可能只是一个无限递归错误。 @AKX 请稍等。我将添加代码 @AKX 你现在可以检查一下吗。 新文件夹的深度太大 @Mathix420 是的,因为它有许多子文件夹和文件。但有什么办法解决 【参考方案1】:

dbutils.fs.ls() 的文档远非完美,而且我手头没有 DataBricks 环境,但如果不使用真正的递归,这样的东西可能会更好地工作,但需要访问的路径列表。

import dbutils


def discover_size(path: str) -> int:
    total_size = 0
    visited = set()
    to_visit = [path]
    while to_visit:
        path = to_visit.pop(0)
        if path in visited:
            print("Already visited %s..." % path)
            continue
        visited.add(path)
        print(
            f"Visiting %s, size %s so far..." % (path, total_size),
        )
        for info in dbutils.fs.ls(path):
            total_size += info.size
            if info.isDir():
                to_visit.add(info.path)
    return total_size


discover_size("/mnt/datalake/.../", verbose=True)

【讨论】:

这显示了 print(f"Already visitor path...") 和 "f" 的语法错误,如果我取消这一行,我不会得到任何结果。 该语法错误意味着您使用的是旧版本的 Python。无论如何,为了兼容性更新了代码

以上是关于RecursionError:比较中超出了最大递归深度'的主要内容,如果未能解决你的问题,请参考以下文章

RecursionError:比较中超出了最大递归深度'

RecursionError:比较超过最大递归深度

RecursionError:超出最大递归深度

Binary Search RecursionError:比较超过最大递归深度

如何使用python绘制散点图?

kivy 中超出了最大递归深度,但仅在打包时超出,而不是在使用 python 开发应用程序时