2013-05-22 73 views
0

我运行it.please时出现此错误,请帮助我,谢谢!python错误TypeError:'NoneType'对象不可迭代

Traceback (most recent call last): 
    File "C:\Python27\Lib\site-packages\PythonClient\ChartReport.py", line 64, in <module> 
    DAVIDenrich(listF = './list1.txt', idType = 'AFFYMETRIX_3PRIME_IVT_ID', listName = 'list1', category = 'abcd,BBID,BIOCARTA,COG_ONTOLOGY,INTERPRO,KEGG_PATHWAY,OMIM_DISEASE,PIR_SUPERFAMILY,SMART,SP_PIR_KEYWORDS,UP_SEQ_FEATURE') 
    File "C:\Python27\Lib\site-packages\PythonClient\ChartReport.py", line 45, in DAVIDenrich 
    rowDict = dict(row) 
TypeError: 'NoneType' object is not iterable 

代码:

def DAVIDenrich(listF, idType, bgF='', resF='', bgName = 'Background1',listName='List1', category = '', thd=0.1, ct=2): 
    from suds.client import Client 
    import os 

    if len(listF) > 0 and os.path.exists(listF): 
     inputListIds = ','.join(open(listF).read().split('\n')) 
     print 'List loaded.'   
    else: 
     print 'No list loaded.' 
     raise 

    flagBg = False 
    if len(bgF) > 0 and os.path.exists(bgF): 
     inputBgIds = ','.join(open(bgF).read().split('\n')) 
     flagBg = True 
     print 'Use file background.' 
    else: 
     print 'Use default background.' 

    client = Client('http://david.abcc.ncifcrf.gov/webservice/services/DAVIDWebService?wsdl') 
    print 'User Authentication:',client.service.authenticate('[email protected]') 

    listType = 0 
    print 'Percentage mapped(list):', client.service.addList(inputListIds,idType,listName,listType) 
    if flagBg: 
     listType = 1 
     print 'Percentage mapped(background):', client.service.addList(inputBgIds,idType,bgName,listType) 

    print 'Use categories:', client.service.setCategories(category) 
    chartReport = client.service.getChartReport(thd,ct) 
    chartRow = len(chartReport) 
    print 'Total chart records:',chartRow 

    if len(resF) == 0 or not os.path.exists(resF): 
     if flagBg: 
      resF = listF + '.withBG.chartReport' 
     else: 
      resF = listF + '.chartReport' 
    with open(resF, 'w') as fOut: 
     fOut.write('Category\tTerm\tCount\t%\tPvalue\tGenes\tList Total\tPop Hits\tPop Total\tFold Enrichment\tBonferroni\tBenjamini\tFDR\n') 
     for row in chartReport: 
      rowDict = dict(row) 
      categoryName = str(rowDict['categoryName']) 
      termName = str(rowDict['termName']) 
      listHits = str(rowDict['listHits']) 
      percent = str(rowDict['percent']) 
      ease = str(rowDict['ease']) 
      Genes = str(rowDict['geneIds']) 
      listTotals = str(rowDict['listTotals']) 
      popHits = str(rowDict['popHits']) 
      popTotals = str(rowDict['popTotals']) 
      foldEnrichment = str(rowDict['foldEnrichment']) 
      bonferroni = str(rowDict['bonferroni']) 
      benjamini = str(rowDict['benjamini']) 
      FDR = str(rowDict['afdr']) 
      rowList = [categoryName,termName,listHits,percent,ease,Genes,listTotals,popHits,popTotals,foldEnrichment,bonferroni,benjamini,FDR] 
      fOut.write('\t'.join(rowList)+'\n') 
     print 'write file:', resF, 'finished!' 

if __name__ == '__main__': 
    DAVIDenrich(listF = './list1.txt', idType = 'AFFYMETRIX_3PRIME_IVT_ID', listName = 'list1', category = 'abcd,BBID,BIOCARTA,COG_ONTOLOGY,INTERPRO,KEGG_PATHWAY,OMIM_DISEASE,PIR_SUPERFAMILY,SMART,SP_PIR_KEYWORDS,UP_SEQ_FEATURE') 
    DAVIDenrich(listF = './list2.txt', idType = 'AFFYMETRIX_3PRIME_IVT_ID', listName = 'list2', category = 'abcd,BBID,BIOCARTA,COG_ONTOLOGY,INTERPRO,KEGG_PATHWAY,OMIM_DISEASE,PIR_SUPERFAMILY,SMART,SP_PIR_KEYWORDS,UP_SEQ_FEATURE') 
    DAVIDenrich(listF = './list2.txt', bgF = './list1.txt', idType = 'AFFYMETRIX_3PRIME_IVT_ID', bgName = 'Background1', listName = 'list2', category = 'abcd,BBID,BIOCARTA,COG_ONTOLOGY,INTERPRO,KEGG_PATHWAY,OMIM_DISEASE,PIR_SUPERFAMILY,SMART,SP_PIR_KEYWORDS,UP_SEQ_FEATURE') 

回答

0

chartReport = client.service.getChartReport(thd,ct) 

添加

chartReport = filter(None, chartReport) 
0

在某些时候,for row in chartReport返回一行是None,你不能转换为字典与dict()

要么找出为什么此迭代器包含None值,要么在处理它之前检查它是否为None,如果是,则跳过它。

相关问题