Je suis novice en python et j'effectue des tâches de codage élémentaires sur edx avec le bloc-notes Jupityr. J'ai rencontré une erreur d'index sur l'une de mes missions que je n'arrive pas à comprendre. L'affectation m'a fait lire un fichier texte une ligne à la fois dans une boucle while, et imprimer la sortie dans un format spécifique. Mon code est le suivantErreur d'index lors de la lecture du fichier txt
city_temp = mean_temp.readline().strip().split(',')
while city_temp:
print (headings[0].title(), "of", city_temp[0], headings[2], "is", city_temp[2], "Celsius")
city_temp = mean_temp.readline().strip().split(',')
Le code passe par le fichier entier, mais au lieu de mettre fin à la « tout » boucle à la ligne vide, il continue de fonctionner et de créer une liste vide. Je ne suis pas sûr de ce qui se passe et je n'arrive pas à trouver une solution par moi-même. J'ai essayé d'ajouter un test 'if' pour une chaîne vide et une rupture, et aussi d'écrire une ligne supplémentaire de texte vide mais aucune de ces options n'a abouti. Si quelqu'un a une idée, je l'apprécierais grandement!
J'ai un extrait de ce que le fichier txt contient aussi collé ci-dessous. Il y a des villes supplémentaires, mais je ne trouve pas nécessaire d'inclure tous:
city,country,month ave: highest high,month ave: lowest low
Beijing,China,30.9,-8.4
Ceci est l'erreur d'index que je recevais: (désolé pour le pauvre mise en forme, l'apprentissage encore
IndexError Traceback (most recent call last)
<ipython-input-18-6ea7e8e263b5> in <module>()
5 while city_temp:
6
----> 7 print (headings[0].title(), "of", city_temp[0], headings[2], "is", city_temp[2], "Celsius")
8 city_temp = mean_temp.readline().strip().split(',')
9
IndexError: list index out of range
Pour résoudre réellement votre IndexError, modifiez dans votre question votre message d'erreur entier, y compris le retraçage. city_temp devrait être une liste vide s'il lit une ligne vide (strip() supprimerait tous les caractères d'espaces avant que le split ne se produise), donc il se passe quelque chose d'autre ici. –
@AlanLeuthard J'ai joint toute l'erreur que je recevais avant, je suis très curieux de comprendre pourquoi cette erreur se produit – thatbrownkid
Ahhhh ... juste testé. 'empty_string.split()' retourne une liste vide. 'empty_string.split (', ')' renvoie une liste avec une chaîne vide. La liste n'est pas vide, donc city_temp est True. Changez 'while city_temp' en 'while city_temp [0]' pour vérifier le vide de ce qui est dans la liste. Ou utilisez un bloc try. –