Skip to main content
 首页 » 编程设计

python之类型为 'NoneType' 的对象没有 len(),但我很确定我的对象是一个有效列表

2025年05月04日9davidwang456

以下模块对我来说一直失败,告诉我“NoneType”类型的对象没有 len(),但传递的对象似乎是一个列表,而不是“NoneType”类型的对象。我在下面包含了模块和输出。

def Purge_Polyploid_MisScores(dictOfLists): 
  #print "dict getting passed to Purge_Polyploid_MisScores function", dictOfLists 
  for x in dictOfLists.keys(): 
    for y in range (0, len(dictOfLists[x])): 
      print "x", x, " and y", y 
      print dictOfLists[x][y] 
      #if not dictOfLists[x][y]: 
        #print "error at ",x,dictOfLists[str(int(x)-1)][0] 
      if len(dictOfLists[x][y])>3: 
        try: 
          dictOfLists[x][y]=dictOfLists[x][y].remove('**') 
        except: 
          for z in dictOfLists[x][y]: 
            if dictOfLists[x][y].count(z)>2: 
              print "removed ",z," at dictOfLists[",x,"][",y,"]", dictOfLists[x][y] 
              dictOfLists[x][y].remove(z) 
              #I think this produces an error: dictOfLists[x][y]=dictOfLists[x][y].remove(z) 
              print "now, it looks like", dictOfLists[x][y] 
        if len(dictOfLists[x][y])>3: 
          print "The Length is still greater than 3! at dictOfLists[",x,"][",y,"]", dictOfLists[x][y] 
 
          #print "the reason you have a polyploid is not a mis-score" 
          #print "dictOfLists[",x,"][",y,"]",dictOfLists[x][y] 
      print "Reached the end of the loop" 
  return dictOfLists 

错误/错误前的输出:

x 449  and y 100 
['Yellow submarine', '273', '273'] 
Reached the end of the loop 
x 449  and y 101 
['Heartland', '250', '250', '250'] 
removed  250  at dictOfLists[ 449 ][ 101 ] ['Heartland', '250', '250', '250'] 
now, it looks like ['Heartland', '250', '250'] 
Reached the end of the loop 
x 449  and y 102 
['Julia', '116', '119', '**'] 
Traceback (most recent call last): 
  File "fast_run.py", line 11, in <module> 
    sample_names_list_e1_keys_as_numbers_e2=transpose.combine_allele_report_pipeline_dict(pipeline_directory, keeplist_address, rejected_samples_address) 
  File "/Users/markfisher/transpose.py", line 887, in combine_allele_report_pipeline_dict 
    samples=Purge_Polyploid_MisScores(samples) 
  File "/Users/markfisher/transpose.py", line 1332, in Purge_Polyploid_MisScores 
    if len(dictOfLists[x][y])>3: 
TypeError: object of type 'NoneType' has no len()  

换句话说,['Julia', '116', '119', '**'] 似乎在 if len(['Julia', '116 ', '119', '**'])>3,我不知道为什么。

我希望我已经为你们提供了足够的知识让你们看到我的错误!谢谢!

请您参考如下方法:

问题是这样的:dictOfLists[x][y]=dictOfLists[x][y].remove('**')。列表的 remove 方法删除元素就地,改变原始列表,并返回 None,因此您将列表设置为 None。相反,只需执行 dictOfLists[x][y].remove('**')。