打印数组的值可以防止空指针错误

printing the values of an Array prevents a null pointer error

我正在尝试搜索一个参数 space 以获得好的模型。在我的代码中,我正在做类似以下的事情:

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 或更高时出现错误。检查显示这些索引处的数组仍然是 'None'。在调试时,我在代码中添加了一个打印语句:

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 吗?

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