Python 为什么是int类型错误?打字错误
我犯了个错误, TypeError:切片索引必须是整数或无,或者具有索引方法。 回溯就像Python 为什么是int类型错误?打字错误,python,numpy,scipy,Python,Numpy,Scipy,我犯了个错误, TypeError:切片索引必须是整数或无,或者具有索引方法。 回溯就像 Traceback (most recent call last): File "test.py", line 24, in <module> wavdata = wav[z:q] TypeError: slice indices must be integers or None or have an __index__ method 我认为center&z&q的变量是int类型的
Traceback (most recent call last):
File "test.py", line 24, in <module>
wavdata = wav[z:q]
TypeError: slice indices must be integers or None or have an __index__ method
我认为center&z&q的变量是int类型的,所以我真的不明白为什么会发生这种错误
if __name__ == "__main__":
wav, fs = wavread("3_7_9.wav")
t = np.arange(0.0, len(wav) / fs, 1/fs)
center = len(wav) / 2
cuttime = 0.04
z = center-cuttime / 2*fs
q= center + cuttime / 2*fs
wavdata = wav[z:q]
time = t[z:q]
plot(time * 1000, wavdata)
xlabel("time [ms]")
ylabel("amplitude")
savefig("waveform.png")
show()
因此,这些除法部分不是int类型而是float类型,因此我可以理解为什么会发生此错误。但是现在我将这些部分更改为/,因此这些部分是int。那么,我如何修复此错误?可能,问题源于变量
z
和q
都是float。确保将它们强制转换为int
变量z
和q
仍然是float
center = len(wav) // 2
cuttime = 0.04
z = center - cuttime // 2 * fs
q = center + cuttime // 2 * fs
因为cuttime
和fs
都是float
,所以整个表达式变成float
您需要将其强制转换为int
like
z = int(center - cuttime // 2 * fs)
q = int(center + cuttime // 2 * fs)
cuttime
在这里作为一个浮点并不重要-2.0//2
返回一个int
。问题在于fs
@Eric,但在我的python3.52.0//2
returnfloat
。我收回它,我的记忆失败了。这在我看来可能是一个糟糕的设计选择,但我可能错过了something@EricPEP0238没有说明返回值的类型5.0//2
是2.0
它是float,但仍然是float
。是的,它是:“结果类型将是在操作之前强制执行a
和b
的常见类型”
z = int(center - cuttime // 2 * fs)
q = int(center + cuttime // 2 * fs)