TypeError:“ map”和“ int”的实例之间不支持“>”

时间:2019-10-25 18:31:02

标签: python types

当我使用3个整数参数运行下面的代码时,

import sys
import numpy as np

fichier=open("vocLemma.tsv")
dico=dict()

borneMin=int(sys.argv[1])
borneMax=int(sys.argv[2])
nbClasseMax=int(sys.argv[3])
cpt=0

error=0
for ligne in fichier:
    try:
        tab=ligne.split("\t")
        mot=tab[0]
        freq=map(int, list(tab[1].strip("[").strip("]").replace(" ", "").split(",")))
        nbAnnee=int(tab[2])
        classes=tab[3]
        nbClasse=0
        for classe in ["A", "B", "C", "D", "E", "F", "G", "H"]:
            if classe in classes:
                nbClasse+=1
        docTotal=np.sum(np.array(freq))
        if not mot.isdigit() and nbAnnee > 1 and docTotal > borneMin and docTotal < borneMax and nbClasse <= nbClasseMax:
            dico[tab[0].strip()]=ligne.strip()
            cpt+=1
    except IndexError:
        error+=1
        pass
print(cpt)
fichier =open("voc_freqmin"+str(borneMin)+"_docmax"+str(borneMax)+"_classemax"+str(nbClasseMax), "w")
for mot in dico:
    fichier.write(dico[mot]+"\n")
fichier.close()

我收到如下错误消息:

File "filtre.py", line 25, in <module>
    if not mot.isdigit() and nbAnnee > 1 and docTotal > borneMin and docTotal < borneMax and nbClasse <= nbClasseMax:
TypeError: '>' not supported between instances of 'map' and 'int'

但是我不知道为什么。有人可以帮助我吗?谢谢!


已解决。我在@randomfigure中添加了此注释,“这是人们从python2移植到python3时遇到的常见错误”(说,使用'map')

1 个答案:

答案 0 :(得分:2)

map函数返回一个map对象,而不是列表。在这一行:

freq=map(int, list(tab[1].strip("[").strip("]").replace(" ", "").split(",")))

您将freq定义为map对象。稍后,当您通过numpy操作将其传递时,它仍然只是单个map对象的数组。这行:

docTotal=np.sum(np.array(freq))

不返回数字,而是返回另一个map对象。

您可以使用以下方法解决此问题:

freq=list(map(int, list(tab[1].strip("[").strip("]").replace(" ", "").split(","))))