关于python的could not convert string to float的问题。

#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import time
import subprocess
import os
from subprocess import call
import csv

#change offset here
offset_peak = 45.0
offset_rsm = 40.0
header_csv = ("time", "amplitude", "rms")

try:
while True:
#pkill because sometimes my microphone was busy
subprocess.call("pkill -9 sox | pkill -9 arecord",shell= True)
time.sleep( 1 )

    #time
    filedate = time.strftime("%Y%m%d-%H%M%S")
    filename = "/home/pi/noise/mp3/" + time.strftime("%Y%m%d") + "/" + filedate + ".mp3"
    filename_csv = "/home/pi/noise/csv/" + time.strftime("%Y%m%d") + ".csv"
    filedate_csv  = time.strftime("%Y-%m-%d %H:%M")
    terminal_time = time.strftime("%H:%M ")

    #record
    subprocess.call("arecord -D hw:1,0 -d 10 -v --fatal-errors --buffer-size=192000 -f dat -t raw --quiet | lame -r --quiet --preset standard - " + filename,shell= True)
    proc = subprocess.getoutput("sox " + filename + " -n stat 2>&1 | grep 'Maximum amplitude' | cut -d ':' -f 2")
    proc_rms = subprocess.getoutput("sox " + filename + " -n stat 2>&1 | grep 'RMS.*amplitude' | cut -d ':' -f 2")
    os.system('clear')
    proc1 = proc.strip()
    proc1 = float(proc1)
    proc_rms = proc_rms.strip()
    proc_rms = float(proc_rms)

    #test your microphone in 5 dB steps and create the function e.g. with mycurvefit.com
    #Fkt 3 30-80 dB
    proc3 = 83.83064 + (28.34183 - 83.83064)/(1 + (proc1/0.04589368)**1.006258)
    #Fkt RMS 30-80 dB
    proc3_rms = 87.69054 + (23.81973 - 87.69054)/(1 + (proc_rms/0.01197014)**0.7397556)

    #add db filextentions: peak - rms
    ext_peak = int(round(proc3, 0))
    ext_rms = int(round(proc3_rms, 0))


    print("Measured values: " + str(proc1) + " / " + str(proc_rms) + " / " + str(proc3) + " / " + str(proc3_rms) + " / " + str(ext_peak) + "\n")

    #csv
    file_exists = os.path.isfile(filename_csv)
    daten_csv = (filedate_csv, proc3, proc3_rms)
    with open(filename_csv, 'a', newline='') as f:
        writer = csv.writer(f)
        if not file_exists:
            writer.writerow(header_csv)
        writer.writerow(daten_csv)

    if proc3 >= offset_peak or proc3_rms >= offset_rsm:
                print(terminal_time + "Sound detected - save: " + filedate + ".mp3 \n")
                os.rename(filename, "/home/pi/noise/mp3/" + time.strftime("%Y%m%d") + "/" + filedate + "-" + str(ext_peak) + "-" + str(ext_rms) + ".mp3")
                time.sleep( 3 )
                #os.system('clear')

    else: 
        print(terminal_time + "No sound detected, delete: " + filedate + ".mp3 \n")
        os.remove(filename)
        time.sleep( 3 )
        #os.system('clear')

except KeyboardInterrupt:
subprocess.call("pkill -9 sox | pkill -9 arecord",shell= True)
print('End')

详细代码如上,当我运行的时候不知为何python shell显示错误,错误信息如下:

Trackback (most recent call last):
File:"/home/pi/noise_level_protocol-master/detect.py, line 30 in
proc1 = float(proc1)
ValueError: could not convert string to float:

希望论坛里的各位大神能够指点迷津,
谢谢。

1个回答

错误说了很清楚了,不能将string类型转化为float ValueError: could not convert string to float。
排除错误:你先debug调试,你的proc1这个字符串内容事什么,是数字没问题,是其他的就报错。

RinaWong
竹霖聴雨 解决了吗
一年多之前 回复
steven96
steven96 回复qq_23126581: 我qq和微信同号 634534031 要不你加我吧 如果没反应的话
接近 2 年之前 回复
steven96
steven96 回复qq_23126581: qq账号1217257300对吧 我已经添加了
接近 2 年之前 回复
qq_23126581
渊渟无迹静涛君 回复steven96: 确定添加了?我怎么没反应?
接近 2 年之前 回复
steven96
steven96 回复qq_23126581: 已添加
接近 2 年之前 回复
qq_23126581
渊渟无迹静涛君 回复steven96: qq 1217257300
接近 2 年之前 回复
steven96
steven96 回复caozhy: 就是比较急,希望大家能够帮一下。
接近 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复steven96: 只要你及时采纳,大家都愿意帮助你的。这里的高手很多,大家一起学习,哈哈
接近 2 年之前 回复
steven96
steven96 你好,可以交换一下微信详聊一下吗 我是小白 恳请大神帮忙
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐