0

当我尝试将浮点数与另一个浮点数相除时,会出现“/: 'str' 和 'float' 不支持的操作数类型”错误。但是,我必须将浮动与另一个浮动分开......

for k in range(0, len(diff2_list)):
    xt_d2 = diff2_list[k]
    if k==0 or k==(len(diff2_list)-1):
        spkd_c2_list.append("NAN")
    else:
        spkd_c2_list.append((diff2_list[k-1])/(diff2_list[k+1]))

列表中的每个值diff2_list都是浮点数,我期望某些浮点值的结果。但正如我之前所说,“/:'str'和'float'不受支持的操作数类型”错误发生。

我怎么解决这个问题?

4

2 回答 2

1

您的代码几乎没有问题。

  1. 处理错误消息中描述的脚本时发生错误。您正在使用索引遍历列表。此列表的元素具有不同的类型(至少strfloat)。如果您的目标是划分两个元素,则需要将两个元素都转换为float.
  2. 你没有range()正确使用。首先,range(0, len(diff2_list))相当于range(len(diff2_list))。但是如果我们查看循环内的代码,我们会发现下一个条件if k==0 or k==(len(diff2_list)-1)::您已添加此内容以避免在访问列表外的索引时出现错误。但是您可以通过确定不包括列表的第一个和最后一个元素的索引的范围来防止它。

    for k in range(1, len(diff2_list) - 1):
    
  3. 错误处理。据我了解,您正在使用的列表包含不同类型的值。我不能确定这种特殊情况,但一般来说,有必要添加异常处理程序以防止发生错误时循环中断。

因此,应用所有这些提示,您的代码将如下所示:

diff2_list = [1, 1.1, "1.2", "1.3"]
spkd_c2_list =[]

for k in range(1, len(diff2_list) - 1):
    xt_d2 = diff2_list[k]  # if you need it, cause in current code you don't use it
    try:
        spkd_c2_list.append(float(diff2_list[k - 1]) / float(diff2_list[k + 1]))
    except:
        spkd_c2_list.append("NAN")
于 2019-06-11T08:27:34.453 回答
0

不支持的操作数类型意味着您的类型之一不是浮点数而是 str(字符串),只需确保您的操作数是浮点数:

spkd_c2_list.append(float(diff2_list[k-1])/float(diff2_list[k+1]))
于 2019-06-11T08:18:36.150 回答