Python pylint中的永久无效语法错误
在我的代码中,我一直从pylint中得到一个持久的无效语法错误,我无法找到它。我已经仔细检查了三遍,没有任何未闭合的括号,但我仍然无法找到它。我做了一些事情(我不知道是什么),把它从原来的位置(大约第90行)移到了现在的位置(第117行) 另一件让我困惑的事情是错误在缩进行的第一个空格上。这是否提供了导致这一现象的线索?我会把我所有的代码贴在下面 编辑:感谢您在帖子中解释如何正确格式化代码Python pylint中的永久无效语法错误,python,Python,在我的代码中,我一直从pylint中得到一个持久的无效语法错误,我无法找到它。我已经仔细检查了三遍,没有任何未闭合的括号,但我仍然无法找到它。我做了一些事情(我不知道是什么),把它从原来的位置(大约第90行)移到了现在的位置(第117行) 另一件让我困惑的事情是错误在缩进行的第一个空格上。这是否提供了导致这一现象的线索?我会把我所有的代码贴在下面 编辑:感谢您在帖子中解释如何正确格式化代码 import sys import pydub import pylab import os import
import sys
import pydub
import pylab
import os
import math
import wave
import struct
def goertzel(samples):
"""
Implementation of the Goertzel algorithm, useful for calculating individual
terms of a discrete Fourier transform.
`samples` is a windowed one-dimensional signal originally sampled at `sample_rate`.
The function returns 2 arrays, one containing the actual frequencies calculated,
the second the coefficients `(real part, imag part, power)` for each of those frequencies.
For simple spectral analysis, the power is usually enough.
Example of usage :
freqs, results = goertzel(some_samples, 44100, (400, 500), (1000, 1100))
"""
# We will only be processing audio, so 48kHz is the sample rate we will use.
# Likewise, since we will only be doing DTMF decoding, we can hard code the
# frequencies we look for. We take both of these out of the argument list for
# the algorithm.
# -Maudrie
SAMPLE_RATE=48000
freqs=((697, 770, 852, 941, 1209, 1336, 1477))
window_size = len(samples)
f_step = SAMPLE_RATE / float(window_size)
f_step_normalized = 1.0 / window_size
# Calculate all the DFT bins we have to compute to include frequencies
# in `freqs`.
bins = set()
for f_range in freqs:
f_start, f_end = f_range
k_start = int(math.floor(f_start / f_step))
k_end = int(math.ceil(f_end / f_step))
if k_end > window_size - 1: raise ValueError('frequency out of range %s' % k_end)
bins = bins.union(range(k_start, k_end))
# For all the bins, calculate the DFT term
n_range = range(0, window_size)
freqs = []
results = []
for k in bins:
# Bin frequency and coefficients for the computation
f = k * f_step_normalized
w_real = 2.0 * math.cos(2.0 * math.pi * f)
w_imag = math.sin(2.0 * math.pi * f)
# Doing the calculation on the whole sample
d1, d2 = 0.0, 0.0
for n in n_range:
y = samples[n] + w_real * d1 - d2
d2, d1 = d1, y
# Storing results `(real part, imag part, power)`
#We don't need real part or imag part, we only need power
#-Maudrie
results.append(d2**2 + d1**2 - w_real * d1 * d2)
freqs.append(f * sample_rate)
return freqs, results
if __name__ == '__main__':
if (len(sys.argv)>=2):
inputaudio=sys.argv[2]
else :
print("Specify file path as command line arg")
with contextlib.closing(wave.open(inputaudio,'r')) as f:
frames = f.getnframes()
rate = f.getframerate()
duration = frames / float(rate)
chunk_no=ceil(duration/.04)
outputstring=""
for x in range (chunk_no):
t1=x*.4
t2=t1+.4
if (t2>duration):t2=duration
chunk=AudioSegment.from_wav(inputaudio)
chunk=chunk[t1:t2]
chunk.export('chunk.wav', format="wav")
meas_freqs, result= goertzel('chunk.wav')
meas_freq1, meas_freq2=find_two_most_present(meas_freqs, result)
actual_freq1=find_most_similar(meas_freq1)
actual_freq2=find_most_similar(meas_freq2)
if actual_freq1>actual_freq2:
actual_freq1, actual_freq2= actual_freq2, actual_freq1
outputstring=outputstring+dtmf_to_digit(actual_freq1, actual_freq2)
os.remove('chunk.wav')
print(outputstring)
def find_two_most_present(meas_freqs, result):
highest=0
second=0
highest_index=-1
second_index=-1
#line 116; pylint only highlights the first space of the next line
for y in range len(result):
if result[y]>second:
if result[y]>highest:
highest=result[y]
else:
second=result[y]
return meas_freqs[highest_index], meas_freqs[second_index]
def dtmf_to_digit(x,y):
if x==697:
if y==1209:
return "1"
elif y==1336:
return "2"
else:
return "3"
elif x==770:
if y==1209:
return "4"
elif y==1336:
return "5"
else:
return "6"
elif x==852:
if y==1209:
return "7"
elif y==1336:
return "8"
else:
return "9"
else:
if y==1209:
return "*"
elif y==1336:
return "0"
else:
return "#"
def find_most_similar(meas_freq):
dmtf_freqs=[697, 770, 852, 941, 1209, 1336, 1477]
error=10000
most_similar_index=-1
for x in len(dtmf_freqs):
new_error=abs((dtmf_freqs[x]-meas_freq)/meas_freq)
if (new_error<error):
error, most_similar_index=new_error,x
return dtmf_freqs[most_similar_index]
导入系统
导入pydub
进口派拉布
导入操作系统
输入数学
输入波
导入结构
def goertzel(样本):
"""
Goertzel算法的实现,对计算单个
离散傅里叶变换的项。
`samples'是一个加窗的一维信号,最初以'sample_rate'进行采样。
函数返回2个数组,其中一个包含实际计算的频率,
第二个是每个频率的系数`(实部,imag部,功率)`。
对于简单的光谱分析,功率通常足够。
用法示例:
freqs,results=goertzel(一些样本,44100,(400500),(10001100))
"""
#我们将只处理音频,所以48kHz是我们将使用的采样率。
#同样,由于我们将只进行DTMF解码,因此我们可以硬编码
#我们寻找的频率。我们把这两个都从参数列表中去掉
#算法。
#-莫德里
抽样率=48000
频率=((69770852941120913361477))
窗口大小=长度(样本)
f\u步长=采样率/浮动(窗口大小)
f_步长_标准化=1.0/窗口大小
#计算我们必须计算的所有DFT箱,以包括频率
#在'freqs'中。
bins=集合()
对于频率中的f_范围:
f_开始,f_结束=f_范围
k_start=int(数学地板(f_start/f_step))
k_end=int(数学单元(f_end/f_step))
如果k\u end>window\u size-1:raise ValueError('频率超出范围%s'%k\u end]
bins=bins.union(范围(k_开始,k_结束))
#对于所有箱子,计算DFT项
n\u范围=范围(0,窗口大小)
频率=[]
结果=[]
对于k in箱:
#用于计算的面元频率和系数
f=k*f_阶跃_归一化
w_real=2.0*math.cos(2.0*math.pi*f)
w_imag=math.sin(2.0*math.pi*f)
#对整个样本进行计算
d1,d2=0.0,0.0
对于n_范围内的n:
y=样本[n]+w_实*d1-d2
d2,d1=d1,y
#存储结果`(实部、imag部、电源)`
#我们不需要真实的部分或图像部分,我们只需要力量
#-莫德利
结果.追加(d2**2+d1**2-w_real*d1*d2)
频率附加(f*采样率)
返回频率、结果
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
如果(len(sys.argv)>=2):
inputaudio=sys.argv[2]
其他:
打印(“将文件路径指定为命令行参数”)
将contextlib.closing(wave.open(inputaudio,'r'))作为f:
frames=f.getnframes()
速率=f.getframerate()
持续时间=帧/浮动(速率)
chunk_no=ceil(持续时间/.04)
outputstring=“”
对于范围内的x(块号):
t1=x*.4
t2=t1+0.4
如果(t2>持续时间):t2=持续时间
chunk=音频段。来自_wav(inputaudio)
chunk=chunk[t1:t2]
chunk.export('chunk.wav',format=“wav”)
测量频率,结果=goertzel('chunk.wav')
meas_freq1,meas_freq2=找到两个最常出现的(meas_freqs,result)
实际频率1=找到最相似的频率(测量频率1)
实际频率2=找到最相似的频率(测量频率2)
如果实际频率1>实际频率2:
实际频率1,实际频率2=实际频率2,实际频率1
outputstring=outputstring+dtmf到数字(实际频率1,实际频率2)
os.remove('chunk.wav')
打印(输出字符串)
def查找最常出现的两个(测量频率、结果):
最高=0
秒=0
最高指数=-1
第二个指数=-1
#第116行;pylint仅高亮显示下一行的第一个空格
对于范围len中的y(结果):
如果结果[y]>秒:
如果结果[y]>最高:
最高=结果[y]
其他:
第二个=结果[y]
返回测量频率[最高索引],测量频率[第二索引]
def dtmf_至_数字(x,y):
如果x==697:
如果y==1209:
返回“1”
elif y==1336:
返回“2”
其他:
返回“3”
elif x==770:
如果y==1209:
返回“4”
elif y==1336:
返回“5”
其他:
返回“6”
elif x==852:
如果y==1209:
返回“7”
elif y==1336:
返回“8”
其他:
返回“9”
其他:
如果y==1209:
返回“*”
elif y==1336:
返回“0”
其他:
返回“#”
def发现最相似(测量频率):
dmtf_freqs=[697708529411203361477]
误差=10000
最相似指数=-1
对于x英寸透镜(dtmf\U频率):
新的\u错误=abs((dtmf\u-freqs[x]-meas\u-freq)/meas\u-freq)
if(new_errorrange()
是Python中的一个函数。它看起来像是一条语句
第117行应为:
for y in range(len(result)):
看起来您打算查找最高和第二高的索引,但是
最高索引
和第二高索引
总是-1
格式:选择您的代码,然后单击{}
按钮(或按Ctrl-K)。什么是范围len(结果)
len(结果)是数组结果的长度,因此对于范围len(result)中的y,应该在数组中迭代(0到len(result)-1),向我们显示错误消息。不,我非常确定range len
是语法错误。这是有效的,对于len(result)中的y也是有效的