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

时间:2020-03-09 14:55:07

标签: python arrays debugging nonetype

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

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

令我惊讶的是,我的代码现在运行顺利。数组已完全填充。如果我注释掉这两行:错误。取消注释:重新运行。

这是怎么回事?为什么打印语句会改变程序的行为?是通过打印值来避免过度活跃的GC?

1 个答案:

答案 0 :(得分:0)

我发现了问题。 return语句使用Tab缩进,但是我在代码的其他任何地方都使用了4个空格。这导致它跳过最外部的for循环。打印声明以某种方式阻止了这种情况。将选项卡更改为空格将消除对print语句的需要。

相关问题