为啥我会收到此错误

Posted

技术标签:

【中文标题】为啥我会收到此错误【英文标题】:why i'm getting this error为什么我会收到此错误 【发布时间】:2018-06-22 01:33:52 【问题描述】:
import tkinter as Tk
from tkinter import ttk
import math as m
win=Tk.Tk()
win.title("Propeller Inputs")

inputFrame=ttk.LabelFrame(win,text="Input")
inputFrame.grid(column=0,row=0)

inputlabel=('Water','Lubrication','Power(KW)','Engine speed(rpm)','Gearbox ratio','Shaft strength(N/mm^2)','Bolt strength(N/mm^2)','Number of bolts','PCD of bolts(mm)')
for a in range (0,9):
    ttk.Label(inputFrame,text=inputlabel[a]).grid(column=0, row=a, pady=5)

#Adding a Combobox
water1=Tk.StringVar()
water1=ttk.Combobox(inputFrame, width=20)
water1['values']=("Sea", "River")
water1.grid(column=1, row=0)
water1.current(0)

lub1=Tk.StringVar()
lub1=ttk.Combobox(inputFrame, width=20)
lub1['values']=("Water", "Oil")
lub1.grid(column=1, row=1)
lub1.current(0)

#Adding a Textbox
P1=Tk.StringVar()
P1=ttk.Entry(inputFrame, width=20)
P1.grid(column=1, row=2)

en1=Tk.StringVar()
en1=ttk.Entry(inputFrame, width=20)
en1.grid(column=1, row=3)

gb1=Tk.StringVar()
gb1=ttk.Entry(inputFrame, width=20)
gb1.grid(column=1, row=4)

T1=Tk.StringVar()
T1=ttk.Entry(inputFrame, width=20)
T1.grid(column=1, row=5)

Tb1=Tk.StringVar()
Tb1=ttk.Entry(inputFrame, width=20)
Tb1.grid(column=1, row=6)

i1=Tk.StringVar()
i1=ttk.Entry(inputFrame, width=20)
i1.grid(column=1, row=7)

D1=Tk.StringVar()
D1=ttk.Entry(inputFrame, width=20)
D1.grid(column=1, row=8)




def calculate():   
    P=float(P1.get())

    en=float(en1.get())
    gb=float(gb1.get())
    T=float(T1.get())
#    Tb=float(Tb1.get())
#    i=float(i1.get())
#    D=float(D1.get())
    k2=1.10
    n=m.ceil(en/gb)


    if "Water" in (lub1.get()):
        #print("Water lubricated")
        k1=1.29
    else:
        #print("Oil lubricated")
        k1=1.26
    #print (k1)


    #tailshaft dia, intermediate shaft dia 
    if "Sea" in (water1.get()):
        dp=m.ceil(100*k1*((560*P)/(n*(T+160)))**0.33)
        d=m.ceil(100*k2*((560*P)/(n*(T+160)))**0.33)

    else:
        dp=m.ceil(103.5*k1*((410*P)/(n*(T+160)))**0.33)
        d=m.ceil(103.5*k2*((410*P)/(n*(T+160)))**0.33)

#    return (dp,d)


    update(dp,d)    


def update(dp,d):

    T=float(T1.get())
    Tb=float(Tb1.get())
    i=float(i1.get())
    D=float(D1.get())

    #bolt dia
    if "Sea" in (water1.get()):
        db=m.ceil(0.65*(((d**3.0)*(T+160))/(i*D*Tb))**0.5)
    else:
        db=m.ceil(((0.427*(d**3.0)*(T+155))/(i*D*Tb))**0.5)

    #liner thickness
    t=m.ceil((168+dp)/28) 

    #bush length
    if "Water" in (lub1.get()):
         l=m.ceil(4*dp) 

    else:
         l=m.ceil(2*dp) 

    #c/s area of key
    Ak=m.ceil((d**3)/(2.6*d))
    print(dp,d,db,Ak,l,t)
    #Output  frame
    outputFrame=ttk.LabelFrame(win,text="Output")
    outputFrame.grid(column=2,row=0)

    outputlabel=("Diameter of Tailshaft (mm)=","Diameter of Intermediate shaft (mm) =","Diameter of bolt (mm) =","Thickness of liner (mm) =","Sternbush bearing length (mm) =","Cross-sectional Area of keyway (mm^2) =")
    for a in range (0,6):
        ttk.Label(outputFrame,text=outputlabel[a]).grid(column=0, row=a, padx=20)

    output=(dp,d,db,t,l,Ak)
    for a in range (0,6):
        ttk.Label(outputFrame,text=output[a]).grid(column=1, row=a, padx=20)

    #Adding a button
    enter1=ttk.Button(outputFrame, text="Change values", command=change)
    enter1.grid(column=1, row=10)



def change():

    #Customer Changes Frame
    updateFrame=ttk.LabelFrame(win,text="Changes")
    updateFrame.grid(column=0,row=12)

    changelabel=("Diameter of Tailshaft (mm)","Diameter of Intermediate shaft (mm)")
    for b in range (0,2):
        ttk.Label(updateFrame,text=changelabel[b]).grid(column=0, row=b, pady=5)

    dp=Tk.StringVar()
    dp=ttk.Entry(updateFrame, width=20)
    dp.grid(column=1, row=0)

    d=Tk.StringVar()
    d=ttk.Entry(updateFrame, width=20)
    d.grid(column=1, row=1)
    dp1=dp.get()

    d1=d.get()


    #Adding a button
    enter2=ttk.Button(updateFrame, text="Update", command=lambda:update(dp1,d1))
    enter2.grid(column=1, row=2, pady=10)

    return(dp,d)




#Adding a button
enter=ttk.Button(inputFrame, text="Calculate", command=calculate)
enter.grid(column=1, row=10, pady=5)



win.mainloop()

错误:

1080.0 921.0 1122 326247 4320 45
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Mayur\Anaconda3\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/Users/Mayur/Desktop/Program using function calls 01 (single error).py", line 171, in <lambda>
    enter2=ttk.Button(updateFrame, text="Update", command=lambda:update(dp1,d1))
  File "C:/Users/Mayur/Desktop/Program using function calls 01 (single error).py", line 113, in update
    db=m.ceil(0.65*(((d**3.0)*(T+160))/(i*D*Tb))**0.5)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float'

i'm not getting where in code string multiplied with float.

【问题讨论】:

检查您发布的代码中的更新方法。您会在代码中找到错误的最后一行 请发布一个最小完整的可验证示例。 请详细说明。@ArpitSolanki “我没有得到代码字符串乘以浮点数的位置。” - 错误消息告诉你准确地你在做什么这个:File "C:/Users/Mayur/Desktop/Program using function calls 01 (single error).py", line 113, in update。这意味着您假设该计算中的某些值是数字,但它们是字符串。你需要做一些调试来验证这些值是你认为的那样。 请阅读How to ask。请提供Minimal, Complete, and Verifiable example。请阅读How do I format my posts using Markdown or html?。 【参考方案1】:

错误表明问题出在**pow(),以及db=m.ceil(0.65*(((d**3.0)*(T+160))/(i*D*Tb))**0.5) 行。

所以问题一定出在此语句中的 ** 运算符中。 很难看出((d**3.0)*(T+160))/(i*D*Tb)) 是如何产生字符串的,所以错误一定出在此处:d**3.0; d 必须是字符串

你的 lambda 是 lambda:update(dp1,d1),而之前你有 d1=d.get()get() 将返回一个字符串,因此您将一个字符串作为第二个参数传递给 update(),这会导致您的错误。

d1=d.get() 更改为d1=int(d.get())d1=float(d.get())(对非数字大小写进行一些错误检查)应该可以解决此问题。

【讨论】:

有一个错字,我更正了。检查更新的代码。 我试过 d1=d.get() 到 d1=float(d.get()) 但它给出了错误,因为无法将字符串转换为浮点数 如果你不能将字符串转换为浮点数,那么get() 显然不会返回一个数字,(这就是为什么我加入了关于错误检查的部分。)你需要弄清楚为什么。 我试图打印该输入但它没有打印它给出同样的错误

以上是关于为啥我会收到此错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到此错误:“不支持此功能(数字商品)。”?

为啥我会收到此错误?返回标签错误(页面没有链接回来)

为啥我会收到此语法错误? (Python)

为啥我会收到此错误? “孩子未申报?

为啥我会收到此 GRPCProvider UpgradeResourceState terraform 错误?

NPM 启动错误上的 ENOENT。为啥我会收到此错误,为啥要查找“我的图片”目录?