【问题标题】:printing the values of an Array prevents a null pointer error打印 Array 的值可防止出现空指针错误
【发布时间】:2020-06-21 11:52:00
【问题描述】:

我正在尝试在参数空间中搜索一个好的模型。在我的代码中,我正在执行以下操作:

configurations = [None] * 9
index = 0
for param1 in range(3):
  for param2 in range (3):
    #call constructor
    configurations[index] = Configuration(param1, param2) 
    index = index + 1
return configurations

然后我在其他地方使用这个数组来构建模型。 但是,由于某种原因,它不会填充数组。访问索引 3 或更高时出现错误。检查显示这些索引处的数组仍然是“无”。在调试时,我在代码中添加了一条打印语句:

configurations = [None] * 9
index = 0
for param1 in range(3):
  for param2 in range (3):
    #call constructor
    configurations[index] = Configuration(param1, param2)
    index = index + 1

for x in configurations:
  print(x.param1)
return configurations

令我惊讶的是,我的代码现在运行顺利。数组完全填满。如果我注释掉这两行:错误。取消注释:它再次工作。

这里发生了什么?为什么 print 语句会改变我的程序的行为?这是通过打印值来避免的过度活跃的 GC 吗?

【问题讨论】:

  • “类似于以下内容” - 你能详细说明一下吗?是否有可能在您的原始代码中,您在某处有一个生成器?生成器是惰性求值的,因此只有在您对其进行迭代时,才会计算出真正的值。
  • 这很有趣,但我直接在 for 循环中调用了构造函数。我将编辑帖子以反映这一点。
  • 您可以尝试在双循环之前打印configurations,然后在它之后(但在打印循环之前)?并显示打印结果?
  • 我发现了这个错误。最后一个 return 语句用 Tab 缩进,但我使用了 4 个空格。这导致它跳过最外层的 for 循环。 print 语句以某种方式阻止了这一点。将制表符更改为空格消除了对打印语句的需要。难以置信。

标签: python arrays debugging nonetype


【解决方案1】:

我发现了问题。 return 语句用 Tab 缩进,但我在代码中的其他任何地方都使用了 4 个空格。这导致它跳过最外层的 for 循环。 print 语句以某种方式阻止了这一点。将制表符更改为空格消除了对打印语句的需要。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2019-08-03
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多