对于循环/错误:“ NoneType”类型的对象没有len()

时间:2019-08-22 08:27:17

标签: python-3.x error-handling

我试图做一个for循环,以根据列表值获取字典的长度。我收到以下错误:

TypeError:类型为'NoneType'的对象没有len()

这是我的代码:

import random 



  ops_machine = {
    'OP1' : {'W1':5, 'w3':6, 'w4':7, 'w5':9},
    'OP2' : {'W11':61, 'w31':56, 'w41':76, 'w51':96},
    'OP3' : {'W11':61, 'w31':56, 'w41':76, 'w51':96},
    'OP4' : {'W11':61, 'w31':56, 'w41':76, 'w51':96},

}


lsta = ['OP1', 'OP3', 'OP4', 'OP5']

individual = [0.21280838, 0.6381886,  0.83189561, 0.37306277, 0.41580845, 0.32058659,
 0.86574121, 0.11232781, 0.79238622, 0.81542997, 0.39082755, 0.20727362,
 0.4521442 , 0.850183 ,  0.76849343, 0.54011742, 0.27670335, 0.96537274,
 0.04313256, 0.44680338]


for i in lsta:
    for j in individual[3:7]:
        b = j * (len(ops_machine.get(i))-1)
        print(b)

有人可以帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

当我是'OP3'时,'OP4'或'OP5'ops_machine.get(i)给您None对象,并且由于len()函数不能与None类型对象一起使用而导致错误。一种可能的解决方案是检查ops_machine.get(i)的结果,如果结果为0,则将长度设置为零。

import random 

ops_machine = {
    'OP1' : {'W1':5, 'w3':6, 'w4':7, 'w5':9},
    'OP2' : {'W11':61, 'w31':56, 'w41':76, 'w51':96},
}

lsta = ['OP1', 'OP3', 'OP4', 'OP5']

individual = [0.21280838, 0.6381886,  0.83189561, 0.37306277, 0.41580845, 0.32058659,
 0.86574121, 0.11232781, 0.79238622, 0.81542997, 0.39082755, 0.20727362,
 0.4521442 , 0.850183 ,  0.76849343, 0.54011742, 0.27670335, 0.96537274,
 0.04313256, 0.44680338]


for i in lsta:
    for j in individual[3:7]:
        values = ops_machine.get(i)
        if values is not None:
            values_len = len(values)
        else:
            values_len = 0 
        b = j * (values_len-1)
        print(b)

如果值是None类型,则可以将b设置为-1

import random 

ops_machine = {
    'OP1' : {'W1':5, 'w3':6, 'w4':7, 'w5':9},
    'OP2' : {'W11':61, 'w31':56, 'w41':76, 'w51':96},
}

lsta = ['OP1', 'OP3', 'OP4', 'OP5']

individual = [0.21280838, 0.6381886,  0.83189561, 0.37306277, 0.41580845, 0.32058659,
 0.86574121, 0.11232781, 0.79238622, 0.81542997, 0.39082755, 0.20727362,
 0.4521442 , 0.850183 ,  0.76849343, 0.54011742, 0.27670335, 0.96537274,
 0.04313256, 0.44680338]


for i in lsta:
    for j in individual[3:7]:
        values = ops_machine.get(i)
        if values is not None:
            values_len = len(values)
            b = j * (values_len-1)
        else:
            b = -1

        print(b)