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))
不知道你这个问题是否已经解决, 如果还没有解决的话:在使用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)