获取 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)
        

【问题讨论】:

printreturn 表示两个不同的东西。 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)&gt;e。但是您还有其他问题,例如,您并没有真正在任何地方使用mk ,并且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

Python TypeError: ‘NoneType‘ object is not subscriptable

Python TypeError: ‘NoneType‘ object is not subscriptable