我正在玩Python,但遇到了一些我无法解释的行为。
当我将地图(我相信它在Python中调用的字典)定义到我的文件顶部时,然后在运行代码两次时,我会得到一个数组String index out of range
。但是当我在我的方法中定义地图/字典时,它会一遍又一遍地运行。
尝试给出一个最小的例子。这是我正在运行的主要方法
if __name__ == '__main__':
while True:
hex = convert_binary_to_hex([1,1,1,1])
print(hex)
这将调用一个函数,将文件拆分为正确的部分等。所有琐碎的事情。
一旦我得到十进制的结果(所以[1,1,1,1]
变为15),我调用这个函数,这是错误发生的地方:
def decimal_sum_chunk(chunk):
chunk.reverse()
sum = 0
for i in range(len(chunk)):
sum += chunk[i] * (2**i)
return digit_to_hex(sum)
def digit_to_hex(number):
if number < 10:
return str(number)
# else we look up the value in the map
return hex[number]
如果我在文件顶部定义了十六进制,则会发生错误:
hex = {10 : 'A', 11 : 'B', 12 : 'C', 13 : 'D', 14 : 'E', 15 : 'F'}
我可以使用完全相同的代码,但通过在那里定义地图来改变最后一个功能,它将完美地运作:
def digit_to_hex(number):
hex = {10 : 'A', 11 : 'B', 12 : 'C', 13 : 'D', 14 : 'E', 15 : 'F'}
if number < 10:
return str(number)
# else we look up the value in the map
return hex[number]
我创建了这个gist,当无效时会显示完整的代码。为了使它工作,我可以将hex
地图/字典放在函数内。
谢谢!