Python pylint中的永久无效语法错误

Python pylint中的永久无效语法错误,python,Python,在我的代码中,我一直从pylint中得到一个持久的无效语法错误,我无法找到它。我已经仔细检查了三遍,没有任何未闭合的括号,但我仍然无法找到它。我做了一些事情(我不知道是什么),把它从原来的位置(大约第90行)移到了现在的位置(第117行) 另一件让我困惑的事情是错误在缩进行的第一个空格上。这是否提供了导致这一现象的线索?我会把我所有的代码贴在下面 编辑:感谢您在帖子中解释如何正确格式化代码 import sys import pydub import pylab import os import

在我的代码中,我一直从pylint中得到一个持久的无效语法错误,我无法找到它。我已经仔细检查了三遍,没有任何未闭合的括号,但我仍然无法找到它。我做了一些事情(我不知道是什么),把它从原来的位置(大约第90行)移到了现在的位置(第117行)

另一件让我困惑的事情是错误在缩进行的第一个空格上。这是否提供了导致这一现象的线索?我会把我所有的代码贴在下面

编辑:感谢您在帖子中解释如何正确格式化代码

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_error
range()
是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也是有效的