Python 为什么是int类型错误?打字错误

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类型的

我犯了个错误, 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类型的,所以我真的不明白为什么会发生这种错误

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.5
2.0//2
return
float
。我收回它,我的记忆失败了。这在我看来可能是一个糟糕的设计选择,但我可能错过了something@EricPEP0238没有说明返回值的类型
5.0//2
2.0
它是float,但仍然是
float
。是的,它是:“结果类型将是在操作之前强制执行
a
b
的常见类型”
z = int(center - cuttime // 2 * fs)
q = int(center + cuttime // 2 * fs)