TypeError: float() argument must be a string or a real number, not 'NoneType'

TypeError: float() argument must be a string or a real number, not 'NoneType'

Excel里面格式没有问题,用同一种格式,有的可以跑出来,有的就报错,求解!
下面是代码

def text_create(name, msg):
    desktop_path = "C:\\Users\\10154\\Desktop\\"  # 新创建的txt文件的存放路径
    full_path = desktop_path + name + '.txt'  # 也可以创建一个.doc的word文档
    file = open(full_path, 'a')
    file.write(msg)  # msg也就是文本内容
    file.write('\n')  #显示写入换行
    # file.close()

def select_file():
    # 选择Excel文件
    filename = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])

    # 打开Excel文件并读取内容
    workbook = openpyxl.load_workbook(filename)
    worksheet = workbook.active

    # 输出表格中的内容并计算能耗
    for row in worksheet.iter_rows(min_row=2):
        row_text=''
        for cell in row:
            #print(cell.value,end=',')
            row_text+=f'{cell.value},'

        RQ = row[0].value
        Q = float(row[1].value)
        T = float(row[2].value)
        f_w = float(row[3].value)
        H = float(row[4].value)
        I = float(row[5].value)
        U = float(row[6].value)
        H_d = float(row[7].value)

        #油,水的密度,t/m3
        ρ_o=0.85
        ρ_w=1
        g = 9.8

        #原油密度ρ,t/m3
        ρ=round((1-f_w/100)*ρ_o+f_w/100*ρ_w, 3)

        #潜油电泵有效功率P(输出功率),KW
        P = round(Q*H*ρ*g/86400,3)

        # 电动机有效功率(输入功率)Ns,KW
        cos = 0.7  # 电动机功率因数
        Ns =round(m.sqrt(3)*I*U/1000*cos,3)

        # 电潜泵的效率η
        η = round(P/Ns,3)

        # 百米吨液用电单耗X
        W = round(U /1000* I * T, 3) #W:耗电量
        X = round(W/(Q*H_d)*100*ρ, 3)

        conclude = (RQ,P,Ns, η, X)
        print(str(conclude).replace("(","").replace(")","")) #.replace("(","").replace(")","")去除表格中的()
        text_create('电潜泵能耗计算结果', str(conclude).replace("(","").replace(")",""))

    data = open('C:\\Users\\10154\\Desktop\\电潜泵能耗计算结果.txt', 'r', encoding='utf_8')
    datas = data.readlines()  # readlines()依次读取所有行(直到结束符 EOF)并返回列表

    wb = Workbook()
    sheet = wb.active

    first_line = ('日期','潜油电泵有效功率P(KW)', '电动机有效功率Ns(KW)', '电潜泵的效率η','百米吨液用电单耗X(KWh/100mt)')

#在excel中建立第一行title
    for i in range(len(first_line)):
        sheet.cell(1, i + 1, first_line[i])

    for index, row in enumerate(datas):
        d = row.split()  # split()通过指定分隔符对字符串进行切片,并返回分割后的字符串列表
        for col in range(len(d)):
            sheet.cell(index + 2, col + 1, d[col].replace(',', ''))  # 表示我们要对第i行第j列单元格进行修改
    # sheet.cell(worksheet.row[0])
    wb.save('电潜泵能耗计算结果.xlsx')


#创造窗口
window=tk.Tk()
window.title('welcome to flower')
window.geometry('500x700')

#给窗口添加图片
canvas=tk.Canvas(window,height=200,width=500)
image_file=tk.PhotoImage(file='C:\\Users\\10154\\Desktop\\1130.gif')
image=canvas.create_image(0,0,anchor='nw',image=image_file)
canvas.pack(side='top')

#输入信息
tk.Label(window,text='含水率f_w:').place(x=50,y=150)
tk.Label(window,text='油的密度ρ_o:').place(x=50,y=190)
tk.Label(window,text='水的密度ρ_w:').place(x=50,y=230)
tk.Label(window,text='电潜泵扬程H:').place(x=50,y=270)
tk.Label(window,text='产液量Q:').place(x=50,y=310)
tk.Label(window,text='电动机运行电流I:').place(x=50,y=350)
tk.Label(window,text='电动机运行电压U:').place(x=50,y=390)
tk.Label(window,text='水泵运行时间T:').place(x=50,y=430)
tk.Label(window,text='动液面深度H_d:').place(x=50,y=470)
var_f_w=tk.StringVar()
entry_f_w=tk.Entry(window,textvariable=var_f_w)
entry_f_w.place(x=160,y=150)
var_ρ_o=tk.StringVar()
entry_ρ_o=tk.Entry(window,textvariable=var_ρ_o)
entry_ρ_o.place(x=160,y=190)
var_ρ_w=tk.StringVar()
entry_ρ_w=tk.Entry(window,textvariable=var_ρ_w)
entry_ρ_w.place(x=160,y=230)
var_H=tk.StringVar()
entry_H=tk.Entry(window,textvariable=var_H)
entry_H.place(x=160,y=270)
var_Q=tk.StringVar()
entry_Q=tk.Entry(window,textvariable=var_Q)
entry_Q.place(x=160,y=310)
var_I=tk.StringVar()
entry_I=tk.Entry(window,textvariable=var_I)
entry_I.place(x=160,y=350)
var_U=tk.StringVar()
entry_U=tk.Entry(window,textvariable=var_U)
entry_U.place(x=160,y=390)
var_T=tk.StringVar()
entry_T=tk.Entry(window,textvariable=var_T)
entry_T.place(x=160,y=430)
var_H_d=tk.StringVar()
entry_H_d=tk.Entry(window,textvariable=var_H_d)
entry_H_d.place(x=160,y=470)

def jisuan():
    f_w=float(var_f_w.get())
    ρ_o =float(var_ρ_o.get())
    ρ_w =float(var_ρ_w.get())
    H =float(var_H.get())
    Q =float(var_Q.get())
    I =float(var_I.get())
    U =float(var_U.get())
    T =float(var_T.get())
    H_d = float(var_H_d.get())

    # 井底液体密度ρ
    ρ=(1-f_w/100)*ρ_o+f_w/100*ρ_w

    # 潜油电泵有效功率P(输出功率),KW
    g = 9.8  # g:重力加速度,m/s2;
    P = Q * H * ρ * g / 86400

    # 电动机有效功率(输入功率),KW
    cos = 0.7  # 电动机功率因数
    Ns=m.sqrt(3)*I*U/1000*cos

    # 电潜泵的效率η
    η = P / Ns

    # 百米吨液用电单耗X
    W = U/1000 * I * T  # W:耗电量
    X = W / (Q * H_d) * 100 * ρ

    t1.insert('end', round(P,3))
    t2.insert('end', round(Ns,3))
    t3.insert('end', round(η,3))
    t4.insert('end', round(X, 3))

这个网站就是讲你这个报错的:

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 成功解决TypeError: ‘float‘ object cannot be interpreted as an integer中的 问题描述: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    在使用Python的for w in range(0.0, 4.1, 0.1):时遇到报错:
    TypeError: 'float' object cannot be interpreted as an integer
    在这里插入图片描述
    为什么会出现这种错误呢?因为Python的函数range(start, stop[, step])中start,stop,step都是整数,当使用了小数就会报错。

    range参数说明:

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
    step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^