执行如下Python
脚本时
1 2 3 4 5 6 7 8 9 10 11 |
import numpy as np dy = [0,1,2] edy = [0,1,2] dy[0:2] = np.fix(dy[0:2]) edy[0:2] = np.fix(edy[0:2]) box = [[1,2,3,4],[3,4,5,6]] box2 = box[dy[0]:edy[2]] |
会遇到错误信息
1 2 3 4 |
Traceback (most recent call last): File "test.py", line 11, in <module> box2 = box[dy[0]:edy[2]] TypeError: slice indices must be integers or None or have an __index__ method |
这个提示非常具有迷惑性,会让人不知所措。
其实非常简单
1 |
dy[0:2] = np.fix(dy[0:2]) |
这行导致整个数组变成了浮点数格式的数组,可以试着打印出结果,就会发现整个里面的数字完全变成了浮点数。
而浮点数是不可以用来作为数组的下标的。
修改成如下方式即可
1 2 3 4 5 6 7 8 9 10 11 |
import numpy as np dy = [0,1,2] edy = [0,1,2] dy[0:2] = np.fix(dy[0:2]) edy[0:2] = np.fix(edy[0:2]) box = [[1,2,3,4],[3,4,5,6]] box2 = box[int(dy[0]):int(edy[2])] |
请注意最后的
1 |
int() |
函数,强制转换浮点数为整数。