Python多个错误

2024-06-08 23:04:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个小项目,但有多个问题。 我正在读取项目所在文件夹中的一个文件,其中包含10个用户的数据。你知道吗

现在,我得到一个错误:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1668, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1662, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1072, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 133, in <module>
    main()
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 120, in main
    print("Pour la personne" , id_usager , ", nous recommandons l'ami" , recommander(id_usager, reseau, matrice_similarite))
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 91, in recommander
    usager_matrice = matrice_similarite.index(id_usager)
AttributeError: 'NoneType' object has no attribute 'index'

至于代码本身。。。它相当大。你知道吗

def ouvrir_fichier(nomFichier):
    """ Ne pas oublier les docstring

    """
    try:
        fp = open(nomFichier, 'r')
        return fp
    except:
        return print("Le fichier n'existe pas. Veuillez réessayer.")

def lire_fichier(fp):
    """ Ne pas oublier les docstring"""
    # Lis n et initialise une liste vide --
    #    où il y a une liste vide pour chaque usager du réseau
    #    ensuite lis le reste du fichier et ajouter l'information à reseau

    liste1 = fp.readlines()
    n = int(liste1[0])
    liste2 = liste1[1:]

    reseau = [[] for i in range(n)]
    for i in liste2:
        i = i.replace("\n", "")
        data = i.split(" ")
        valeur1 = int(data[0])
        valeur2 = int(data[1])
        reseau[valeur1].append(valeur2)
        reseau[valeur2].append(valeur1)
    fp.close()
    return reseau

def trouver_nombre_elements_communs_entre_listes(liste1, liste2):
    """ Ne pas oublier les docstring"""
    compteur_amis_commun = 0
    for element in liste1:
        if element in liste2:
            compteur_amis_commun = compteur_amis_commun + 1
    return compteur_amis_commun


def initialiser_matrice(n):
    """
    Crée une matrice nxn, initialisée avec des zéros et retourne la matrice.
    Args:
        n (int): dimension de la matrice nxn
    Returns:
        matrice (list): matrice initialisée

    """
    matrice = []
    for ligne in range(n):  # pour chacune des lignes dans n
        matrice.append([])  # créer une ligne (liste) et l'initialiser à 0
        for colonne in range(n):
            matrice[ligne].append(0)  # ajouter un 0 pour chaque n colonne
    return matrice


def calculer_scores_similarite(reseau):
    """ Ne pas oublier les docstring"""
    n = len(reseau)
    matrice_similarite = initialiser_matrice(n)
    liste1 = []
    liste2 = []
    compteur_liste1 = 0
    compteur_liste2 = 0

    for element_liste1 in reseau:
        liste1 = element_liste1
        for element_liste2 in reseau:
            liste2 = element_liste2
            compteur_amis_commun = trouver_nombre_elements_communs_entre_listes(liste1, liste2)
            matrice_similarite[compteur_liste1][compteur_liste2] = compteur_amis_commun
            compteur_liste2 = compteur_liste2 + 1
        compteur_liste1 = compteur_liste1 + 1
        compteur_liste2 = 0

    return matrice_similarite


def recommander(id_usager,reseau,matrice_similarite):
    """ Ne pas oublier les docstring"""

    usager_matrice = matrice_similarite.index(id_usager)
    ami_recommande = matrice_similarite.index(max(usager_matrice))
    max_value = max(matrice_similarite.index(usager_matrice))

    if ami_recommande == id_usager:
        max_value = max_value - 1

    ami_recommande = matrice_similarite.index(max_value)

    while True:
        if ami_recommande == reseau.index(ami_recommande):
            ami_recommande = reseau.index(max_value, ami_recommande + 1)
            return True

    return ami_recommande

def main():

    nomFichier = input("Nom du fichier contenant le réseau: ")
    reseau = lire_fichier(ouvrir_fichier(nomFichier))
    n = len(reseau)
    matrice_similarite = calculer_scores_similarite(reseau)
    while True:

        while True:

            id_usager = int(input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}):".format(n)))
            if 0 <= id_usager and id_usager < n:
                calculer_scores_similarite(reseau)
                print("Pour la personne" , id_usager , ", nous recommandons l'ami" , recommander(id_usager, reseau, matrice_similarite))
                continue
            else:
                print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")

        autreRecommandation = input("Voulez-vous une autre recommandation (oui/non)?")
        if autreRecommandation.lower() == "oui":
            return True
        else:
            print("Merci d'avoir utiliser le programme de recommandation d'amis.")
            break

if __name__ == "__main__":
    main()

大部分的内容似乎工作良好,直到我得到的部分,我需要推荐一个用户识别。在此期间,我也会尝试处理doc字符串,但我完全需要一些帮助来调试它。我在另一个.py项目上测试了大部分代码,直到找到“recommander”函数

谢谢

第一次编辑:

我确实忘了申请报税表。我改了,现在在def里。但是现在。。。我好像犯了这个错误。你知道吗

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1668, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1662, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1072, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 132, in <module>
    main()
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 119, in main
    print("Pour la personne" , id_usager , ", nous recommandons l'ami" , recommander(id_usager, reseau, matrice_similarite))
  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 89, in recommander
    usager_matrice = matrice_similarite.index(id_usager)
ValueError: 0 is not in list

Tags: inpyidmainlinefileamipydev
2条回答

你的代码有点小错误。你知道吗

您在102号线上拨打: matrice_similarite = calculer_scores_similarite(reseau)

函数calculer_scores_similarite没有返回值

您需要添加该函数return matrice_similarite作为函数的最后一行。你知道吗

回溯的答案是:

  File "C:/Users/101136/PycharmProjects/tp2/TP2.py", line 91, in recommander
    usager_matrice = matrice_similarite.index(id_usager)
AttributeError: 'NoneType' object has no attribute 'index'

这仅仅意味着matrice_similarite就是None。 现在,当您阅读回溯到顶部时,您会看到对recommander的失败调用位于main,行为:

print(
    "Pour la personne",
    id_usager,
    ", nous recommandons l'ami",
    recommander(id_usager, reseau, matrice_similarite))

此时,matrice_similarite定义如下:

matrice_similarite = calculer_scores_similarite(reseau)

正如我们所料,calculer_scores_similarite不返回任何内容,因此None。 在阅读此函数的定义时,我猜您只是忘记了返回正在计算的矩阵,因此添加以下内容应该可以:

return matrice_similarite

相关问题 更多 >