【问题标题】:Syntax Errors Regarding Amplitude关于幅度的语法错误
【发布时间】:2018-06-27 17:13:42
【问题描述】:

下午好,

我目前正在寻求比较示波器测量的电压幅度与时间。我正在从 Linux 终端运行我的代码,目前遇到以下错误:

    ValueError: Invalid number of FFT data points (0) specified.
    NameError: name 'yf' is not defined

我的代码贴在下面:

import csv
import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft


sample_interval= -1
sample_num = -1
time = []
amplitude = []
with open('nofilter-1.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
        time.append(row[3]);
        amplitude.append(row[4]);
        if(row ==1):
            sample_interval = row[1]
        if(row ==2):
            sample_num = row[1]
# sample spacing
print("syntax")
yf = fft(amplitude)
xf = np.linspace(0.0, 1.0/(2.0*sample_interval), sample_num/2) 
fig, ax = plt.subplots()
ax.plot(xf, 2.0/sample_num * np.abs(yf[:sample_num//2]))
plt.show()

我是否遇到任何语法错误或未正确定义变量?

【问题讨论】:

  • 你能发布完整的回溯吗?
  • ValueErrorNameErrorSyntaxError 都是不同的东西。这就是它们有不同名称的原因——当然,它们在描述中包含其他信息。
  • 无论如何,如果您在交互式终端中运行它,而不是作为脚本运行,并且从 yf = fft(amplitude) 行中获得 ValueError,那么您还没有成功存储任何内容yf。所以,如果你继续输入其余的行,当你尝试使用yf 时,你会得到一个NameError。如果这是您的问题,请忘记NameError;您需要修复ValueError,此时另一个会消失。
  • 如果您阅读错误消息,它会显示Invalid number of FFT data points (0) specified. 所以最喜欢amplitude 是空的——它有0 分。您可以在fft 调用之前尝试print(amplitude)print(len(amplitude)) 来验证这一点。由于您将 appending 到 CSV 文件中每一行的列表中,这可能意味着没有行。但是您也可以通过添加例如print(row)print('.', end='') 或该循环内的任何内容来测试它。如果它永远不会发生,那就是问题所在。
  • 附带说明:row 是一个字符串列表,所以row==1 永远不会是真的。我不确定你想在那里测试什么,但事实并非如此。

标签: python error-handling syntax


【解决方案1】:

抱歉,回复晚了!这是我正在使用的 .csv 文件的 sn-p。 .csv file

可以看出,第一列和第三列包含某种形状或形式的字符串,这就是为什么我在代码中指出我可能混淆了行和列之后在代码中注意到的原因。我听从了 bobrobbob 的建议,但运气不佳。

【讨论】:

  • 这不是答案。请编辑您的问题。我的回答确实非常错误。对不起。在 python 列表中是 0-indexed。从每个列号中减去一个。即time.append(row[2]) 它应该可以工作
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 2013-02-15
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2020-07-21
相关资源
最近更新 更多