获取 TypeError:“NoneType”和“int”实例之间不支持“<=”
Posted
技术标签:
【中文标题】获取 TypeError:“NoneType”和“int”实例之间不支持“<=”【英文标题】:Getting a TypeError: '<=' not supported between instances of 'NoneType' and 'int' 【发布时间】:2022-01-20 12:32:53 【问题描述】:我是一个 python 初学者,我不明白我收到的代码错误。
我正在尝试使用平分线法找到一个等于或尽可能接近 100mm/0.1m 的 x 值。
这是我的错误:
如果 z
TypeError:“NoneType”和“int”的实例之间不支持“
代码:
xL, xR = 0, 10
m= 800
k=5E6
xM = (xL + xR)/2
def dispcalc(m,k,xM): #Dispalcement Function
xL, xR = 0, 10 # Initial x Left and x Right
xM = (xL + xR) / 2 #Midpoint of xL and xR
print(xM)
z = (dispcalc(m,k,xM))
while z != 100:
xM = (xL + xR) /2
if z <= 100:
xR=xM
xM = (xL + xR) / 2
z = dispcalc(800, 5E6, xM)
else:
xL = xM
xM = (xL + xR) / 2
z = dispcalc(800, 5E6, xM)
dispcalc(800, 5E6, xM)
print(xM, z)
如果我在 def dispcalc 函数中使用 while 循环,另一个错误是代码不打印任何内容。
xL, xR = 0, 10
m= 800
k=5E6
xM = (xL + xR)/2
def dispcalc(m,k,xM): #Dispalcement Function
xL, xR = 0, 10 # Initial x Left and x Right
xM = (xL + xR) / 2 #Midpoint of xL and xR
print(xM)
z = (dispcalc(m,k,xM))
while z != 100:
xM = (xL + xR) /2
if z <= 100:
xR=xM
xM = (xL + xR) / 2
z = dispcalc(800, 5E6, xM)
else:
xL = xM
xM = (xL + xR) / 2
z = dispcalc(800, 5E6, xM)
dispcalc(800, 5E6, xM)
print(xM, z)
【问题讨论】:
print
和 return
表示两个不同的东西。 discalc
不返回 xM
的值。
你能修复缩进吗?目前还不清楚 dispcalc 函数中的代码是什么。您还混淆了具有相同名称 (xM) 的局部变量和全局变量
我已经改变了缩进。我已经尝试将所有内容都放在 dispcalc 函数中
此代码不会产生任何输出,因为从未调用过 dispcalc。您需要查看 Python 的按值传递和按引用传递策略以及局部/全局变量
【参考方案1】:
您的函数dispcalc
缺少return
语句。目前,您执行一些计算并打印结果,但不要在内存中保留对此类结果的任何引用,这就是return
所做的。因此,dispcalc
返回None
。然后将该值 ( None
) 分配给变量 z
,这就是出现该错误的原因。
正确的代码(在你的第一个 sn-p 中):
def dispcalc(m,k,xM): #Dispalcement Function
xL, xR = 0, 10 # Initial x Left and x Right
xM = (xL + xR) / 2 #Midpoint of xL and xR
print(xM) #this is in fact not needed
return(xM)
【讨论】:
啊我明白了,我现在明白了return 这对你有帮助,谢谢!但现在我陷入了无限循环,不知道为什么会这样。 那是因为z
收敛到零,但我认为你应该为此写一个新问题,因为最初的错误现在已经解决了。如果您同意这一点,请接受我的回答(但没有压力)。但是,我建议您查看该方法。 AFAIK 你需要一个公差值e
,然后做while abs(z-100)>e
。但是您还有其他问题,例如,您并没有真正在任何地方使用m
和k
,并且dispcalc
不应该分配xL, xR = 0, 10
,因为它总是会卡住。以上是关于获取 TypeError:“NoneType”和“int”实例之间不支持“<=”的主要内容,如果未能解决你的问题,请参考以下文章
BeautifulSoup:TypeError:“NoneType”对象不可下标
Tensorflow TypeError:获取参数None的类型无效<type'NoneType'>?
Spotipy:尝试访问播放列表时,“TypeError:'NoneType' 对象不可下标”
Python TypeError: ‘NoneType‘ object is not subscriptable