为什么在dynamoDB中插入项目时,使用相同的变量只得到1种情况下的RecursionError ?



我在python 3和boto3中看到一个非常奇怪的行为,当向dynamoDB插入一个项目时。

# Assume that set_original() returns a dictionary
original = set_original()
# copy is an EXACT copy of original, but hardcoded.
copy = {..hardcoded "original" dictionary..}

我可以确认两个字典是相同的,因为下面返回True:

if copy == original:
return True

现在这是失败的巨大的RecursionError: maximum recursion depth exceeded while calling a Python object

table.put_item(Item=original)

但这工作得很好,并成功地将数据插入dynamodb:

table.put_item(Item=copy)

可能发生什么事?我检查了type()和dir()对两者都返回相同的结果,它们基本上是彼此的副本,但只有一个插入失败,而另一个没有。

虽然我不知道发生这种情况的确切原因,但我解决如下:set_original()正在创建一个字典,其中一个变量不是str,而是一个漂亮的soup string:<class 'bs4.element.NavigableString'>这对于python是可以的,但是对于dynamoDB就不行了。解决方案基本上是将所有这些NavigableString转换为str类型。

最新更新