打印数组的值可以防止空指针错误
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 语句的需要。
我正在尝试搜索一个参数 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 语句的需要。