web-dev-qa-db-fra.com

TypeError: l'objet '_io.TextIOWrapper' n'est pas indexable

Obtenir l'erreur comme le dit le titre. Voici le retraçage. Je sais que lst [x] est à l'origine de ce problème, mais je ne sais pas trop comment résoudre celui-ci. J'ai déjà recherché google + stackoverflow, mais je n'ai pas obtenu la solution que je cherchais.

Traceback (most recent call last):
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 30, in <module>
main()
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 28, in main
print(medianStrat(lst))
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 24, in medianStrat
return lst[x]
TypeError: '_io.TextIOWrapper' object is not subscriptable

Voici le code réel

def medianStrat(lst):
    count = 0
    test = []
    for line in lst:
        test += line.split()
        for i in lst:
            count = count +1
            if count % 2 == 0:
                x = count//2
                y = lst[x]
                z = lst[x-1]
                median = (y + z)/2
                return median
            if count %2 == 1:
                x = (count-1)//2
                return lst[x]     # Where the problem persists

def main():
    lst = open(input("Input file name: "), "r")
    print(medianStrat(lst))

Alors, quelle pourrait être la solution à ce problème ou que pourrait-on faire à la place pour faire fonctionner le code? (La fonction principale que le code devrait faire est d'ouvrir un fichier et d'obtenir la médiane)

8
Eric

Vous ne pouvez pas indexer (__getitem__) une _io.TextIOWrapper objet. Ce que vous pouvez faire, c'est travailler avec un list de lignes. Essayez ceci dans votre code:

lst = open(input("Input file name: "), "r").readlines()

De plus, vous ne fermez pas l'objet file, ce serait mieux:

with open(input("Input file name: ", "r") as lst:
    print(medianStrat(lst.readlines()))

with garantit la fermeture du fichier, voir docs

7
Robin Curbelo