- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在这里查看了很多关于这个问题的例子,但我无法为我的例子解决这个问题。
任何建议将不胜感激,我已经对这种递归感到头疼了。
tree = {}
def populate_node(account):
node = '%(LOGIN)s,%(server_id)s' % account
tree[node]['login'] = account['LOGIN']
tree[node]['email'] = account['EMAIL'].lower()
tree[node]['server_id'] = account['server_id']
for account in accounts:
node = '%(LOGIN)s,%(server_id)s' % account
parent = None
if account['AGENT_ACCOUNT']:
parent = '%(AGENT_ACCOUNT)s,%(server_id)s' % account
if node not in tree:
tree[node] = {}
populate_node(account)
if parent:
tree[node]['parent'] = parent
if parent not in tree:
tree[parent] = {
'login': parent,
'server_id': account['server_id'],
'children': [node],
}
else:
if 'children' not in tree[parent]:
tree[parent]['children'] = [node]
else:
tree[parent]['children'].append(node)
def get_path(node, tree):
parent = node.get('parent')
node_login = str(str(node.get('login')) + ',' + str(node.get('server_id')))
if not parent:
return []
elif parent == node_login:
return [parent]
path = get_path(tree[parent], tree)
return [parent] + path
for k, v in tree.items():
v['path'] = get_path(v, tree)
v['level'] = len(v['path']) + (1 if v['login'] != v.get('parent') else 0)
默认:
tree = {}
节点是树
的一个项目。
示例树:
tree = {
'1987,mt4-demo-0': {
'login': 1987,
'email': 'email_1',
'server_id': 'mt4-demo-0'
},
'16044,mt4-demo-0': {
'login': 16044,
'email': 'email_2',
'server_id': 'mt4-demo-0'
},
'160877748,mt4-demo-0': {
'login': 160877748,
'email': 'email_3',
'server_id': 'mt4-demo-0'
}
}
我每次都会遇到这个递归错误
RecursionError: maximum recursion depth exceeded while getting the str of an object
最佳答案
您的代码假定您始终处理 acyclic directed graph , 但您的输入至少有一个 directed cycle其中,一个 AGENT_ACCOUNT
引用直接或间接指向另一个帐户,而该帐户又具有指向第一个帐户的 AGENT_ACCOUNT
值。
例如,如果 accounts
设置为:
accounts = [
{'LOGIN': 'foo', 'EMAIL': 'foo@bar.com', 'server_id': 'server 1',
'AGENT_ACCOUNT': 'bar'},
{'LOGIN': 'bar', 'EMAIL': 'bar@bar.com', 'server_id': 'server 1',
'AGENT_ACCOUNT': 'foo'}]
然后树
变成:
{'bar,server 1': {'children': ['foo,server 1'],
'email': 'bar@bar.com',
'login': 'bar',
'parent': 'foo,server 1',
'server_id': 'server 1'},
'foo,server 1': {'children': ['bar,server 1'],
'email': 'foo@bar.com',
'login': 'foo',
'parent': 'bar,server 1',
'server_id': 'server 1'}}
注意 foo
有一个 AGENT_ACCOUNT
指向 bar
,bar
指向 foo
,形成一个循环。
这将在这两个条目中的任何一个上产生无限递归错误:
>>> get_path(tree['bar,server 1'], tree)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in get_path
File "<stdin>", line 8, in get_path
File "<stdin>", line 8, in get_path
[Previous line repeated 994 more times]
File "<stdin>", line 2, in get_path
RecursionError: maximum recursion depth exceeded while calling a Python object
您可以及早检测到此类循环并以更清晰的错误消息退出:
def get_path(node, tree, seen=None):
if seen is None:
seen = set()
parent = node.get('parent')
if parent:
if parent in seen:
raise ValueError(
'Already handled {!r}, cycle detected. '
'Check all of {}'.format(
parent, sorted(seen)))
seen.add(parent)
node_login = '{0[login]},{0[server_id]}'.format(node) # cleaner method to generate the key
if not parent:
return []
elif parent == node_login:
return [parent]
path = get_path(tree[parent], tree, seen) # pass seen along to recursive calls
return [parent] + path
在同一 tree
上运行这个更新版本现在会产生:
>>> get_path(tree['bar,server 1'], tree)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 16, in get_path
File "<stdin>", line 16, in get_path
File "<stdin>", line 9, in get_path
ValueError: Already handled 'foo,server 1', cycle detected. Check all of ['bar,server 1', 'foo,server 1']fted by one space
我假设这样的循环是错误的。如果不是,只需使用 if parent in seen: return []
返回到该点的路径(因此忽略循环),但是您将拥有每个成员的路径版本循环,每条路径都是下一条路径的旋转版本。
您真的应该修复您的帐户信息,并消除此类循环。如果你需要找到所有这样的循环,你可以使用:
from collections import deque
def find_all_cycles(tree):
visited, cycles, path = set(), [], []
queue = deque(sorted(tree))
while queue:
key = queue.pop()
if key in visited:
continue
visited.add(key)
path.append(key)
parent = tree[key].get('parent')
if not parent:
path = []
elif parent in visited:
# cycle detected!
cycles.append(path + [parent])
path = []
else:
queue.append(parent)
return cycles
关于python - 递归错误 : maximum recursion depth exceeded while getting the str of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49851776/
cv2.phase() 函数有问题。我编写了以下代码: img = cv2.imread("1.jpg", 0) cv2.imshow("image", img) img_dx = cv2.Sobel
我正在尝试在 OpenCV 中处理一些图像。具体来说,使用以下函数交换颜色 Pane 。 def green_ble_swap(image) im_rgb = cv2.cvtColor(ima
在Unreal 4.24编辑器中,Actor's Detail面板上的“Rendering”部分中,有一个“Render CustomDepth Pass”复选框,以及一个“CustomDepth S
当我尝试在 Visual Studio 2010 中从 here 运行此代码时.我收到以下错误 OpenCV Error: Assertion failed ((img.depth() == CV_8
我有一个计算旋转和平移矩阵的代码如下: matrix Matrix rt = new Matrix(3, 4); if (positiveCount[0] > positiveCount[1])
我是初学者。我尝试使用Tensorflow进行图像分类,并收到以下错误。我在网上发现了类似的问题,但我听不懂。错误是什么意思?我应该怎么做?请给我一些建议。我使用100个文件(png/15pix,15
我在 this website 上找到了以下代码: import os import os.path import cv2 import glob import imutils CAPTCHA_IMA
这是虚拟更衣室的代码 因此,基本上是为了运行此代码ubuntu 12.04,python 2.7.3,gtk2和opencv 2。它删除背景屏幕,在几乎任何光线条件下检测T恤,替换T恤颜色。编写用于替
我从上面得到这个错误,不知道如何避免它。我的目的是获取屏幕截图,然后对其进行模板匹配,以查看此时屏幕上是否显示图标。到目前为止,它只是图标的位置。我的代码: #include "opencv2/hig
我正在尝试获取使用开放姿势检测到的点的像素坐标值。有人可以告诉我这是识别像素坐标的正确方法吗?还是有其他特定方法可以获取下图中表示为 2 和 5 的像素坐标? 代码: for pair in POSE
我正在尝试使用代码阅读多项选择测试反馈中的答案,但出现以下错误消息: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F |
我有一个 Python 算法,它基本上可以帮助找到函数的“深度”: f(a) has a depth of 1 f(g(h(a,b,c),d)),e) has a depth of 3 伪算法是这样的
我正在使用 d3 编写动画,但我似乎无法找到一种方法来轻松确保图形始终出现在其他图形“后面”。 具体来说,我正在处理直线和圆(想象一个有向图),有些线位于圆的顶部,而其他线位于圆的下方,看起来有点糟糕
我正在研究爬虫,需要准确理解“链接深度”的含义。以nutch为例:http://wiki.apache.org/nutch/NutchTutorial depth indicates the link
当做 depth first search在 Directed Graph pre 是什么意思和 post数字? 例如: 如果您从节点 A 开始并按字母顺序排列 Depth First Search你
我在尝试为 Vulkan 构建投影矩阵时遇到了矛盾,并且还没有找到关于投影矩阵如何将 Z 从输入向量映射到输出的解释。映射 x 和 y 很简单。我的理解是 OpenGL 投影矩阵应该将近视锥平面映射到
boolean backtrackDFS(v) { If (SolutionFound(v)) return true; Mark vertex v as reached. f
根据 AIMA(人工智能:现代方法)中的 Norvig 的说法,深度优先算法并不完整(不会总是产生解决方案),因为在某些情况下,下降的子树将是无限的。 另一方面,如果分支因子不是无限的,则广度优先方法
我正在使用谷歌标签管理器对当前站点进行谷歌分析。 现在,我们想知道人们在我们的网站上滚动了多远。 所以我使用了一个名为jquery.scrollDepth.js的插件 $(document).r
我正在用 smallcheck 做我的第一项真正的工作, 我对如何使用 Depth 有点困惑范围。在开始之前,让我先说明我在使用什么 smallcheck为了。 在工作中,我们正在我们自己的内部数据库
我是一名优秀的程序员,十分优秀!