IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

TypeError: 'NoneType' object is not iterable.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 33
    Par défaut TypeError: 'NoneType' object is not iterable.
    bonjour a tous,

    mon problème est dans le titre, TypeError: 'NoneType' object is not iterable à la ligne 37

    je ne vois pas ou ça bug


    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    # -*-coding:Utf-8 -*
     
    import os
     
    from map import Map 
     
    import pygame
    pygame.init()
     
    myMap = Map()
    myMap.printMap()
     
    def rulesGames():
     
    	print("Rules of the game")
    	# ecrire les regles du jeu
     
     
    rulesGames()
     
     
     
    def movement():
     
     
     
    	wall = "O"
    	mcGyver = "X"
    	road = " "
     
     
    	newPosition = myMap.position("X")
    	exit = myMap.position("G")
    	oldCase = " "
    	print("\n".join(myMap.save))
     
    	while list(newPosition) != list(exit):
     
    		command = 0 
    		command = input("What direction ?")
     
    		if len(command) == 1:
     
    			direction = 1
    			miles = 1
     
    		else: 
    			direction = command[0]
    			miles = int(command[1:])
     
     
    		for i in range(miles):
    			Oldposition = myMap.position("X")
    			newPosition = list(Oldposition) 
     
     
     
    		if event.type == KEYDOWN:
     
    			if event.key == K_UP:
    				newPosition[0] -= 1
     
    			if event.key == K_RIGHT:
    				newPosition[1] -= 1
     
    			if event.key == K_DOWN:
    				newPosition[0] += 1
     
    			if event.key == K_LEFT:
    				newPosition[1] += 1 
     
     
     
     
     
    			if myMap.atPosition(newPosition) != wall:
    				myMap.write(Oldposition, oldCase)
    				oldCase = myMap.read(newPosition)
    				myMap.write(newPosition, "X")
     
     
    	print("\n".join(myMap.save))
     
    	print("You did it !")
     
    movement()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    # -*-coding:Utf-8 -*
    import os
     
    class Map: 
     
     
    	def __repr__(self):
    		return "<Map {}>".format(self.name)
     
     
     
    	def printMap(self):
     
    		map = os.listdir("map")
    		mapFile = open("./Map/"+map[0], "r")
    		print(mapFile.read())
    		self.save = mapFile.read().splitlines()
     
     
     
    	def size(self):
    		absc = len(save[0])
    		ordi = len(save)
     
    		return(absc, ordi)
     
     
     
    	def position(self, wanted):
     
    		for i, line in enumerate(self.save):
    			for j, character in enumerate(line):
     
    				if character == wanted:
     
    					abscissa = i
    					ordinate = j
     
    					return(abscissa, ordinate)
     
     
    	def readMap(self, position, character):
    		x = position[0]
    		y = position[1]
     
    		line = list(self.save[x])
    		line[y] = character
     
    		self.save[x] = "".join(line)
     
     
    	def atPosition(self, position):
    		return(self.save[position[0]][position[1]])
    Merci pour votre aide !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par mac79 Voir le message
    mon problème est dans le titre, TypeError: 'NoneType' object is not iterable à la ligne 37
    La ligne 37 de quel bout de code?
    Postez l'erreur complète, çà donne aussi l'instruction, l'appelant...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour

    En dehors de la très judicieuse remarque de wiztricks (car aucune des deux lignes 37 ne fait d'itération), cette erreur se produit quand on veut itérer sur un truc qui aurait dû être un itérable mais qui, par hasard/accident/erreur/cas particulier se trouve être "None" (ou tout autre type non itérable comme par exemple int, float, bool, etc).

    Prenons par exemple cette instruction for i, line in enumerate(self.save). Si "self.save" n'est pas un itérable, Python répondra alors qu'il ne peut pas itérer dessus. Il en va de même pour l'instruction suivante for j, character in enumerate(line).

    Citation Envoyé par mac79 Voir le message
    je ne vois pas ou ça bug
    T'as tenté le print() ??? Une instruction souvent utile pour voir non pas "où ça bug" (car ça t'a été dit => en ligne 37 !!!) mais pourquoi ça bug...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    (car aucune des deux lignes 37 ne fait d'itération), cette erreur se produit quand on veut itérer sur un truc qui aurait dû être un itérable
    Et les itérations ne se résument pas aux boucles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a, b = None
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'NoneType' object is not iterable
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 33
    Par défaut
    pardon j'aurais du bien expliquer

    Traceback (most recent call last):
    File "gyver.py", line 86, in <module>
    movement()
    File "gyver.py", line 37, in movement
    while list(newPosition) != list(exit):
    TypeError: 'NoneType' object is not iterable

    et pour avoir l'erreur tu m'as dis de print() mais je print quoi et comment ? merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par mac79 Voir le message
    Traceback (most recent call last):
    File "gyver.py", line 86, in <module>
    movement()
    File "gyver.py", line 37, in movement
    while list(newPosition) != list(exit):
    TypeError: 'NoneType' object is not iterable
    L'erreur vous dit juste que newPosition ou exit valent None.
    Ces variables ont été assignées un peu avant (ou dans la boucle) via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	newPosition = myMap.position("X")
    	exit = myMap.position("G")
    soit çà ne devrait jamais arriver et dans ce cas, il faut comprendre pourquoi myMap.position retourne None alors que... soit la condition de sortie de boucle doit être écrite autrement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 33
    Par défaut
    merci pour ton aide je vais regarder ça de plus près

Discussions similaires

  1. [Python 2.X] TypeError: 'int' object is not iterable
    Par nmokht97 dans le forum Général Python
    Réponses: 5
    Dernier message: 11/06/2018, 17h40
  2. TypeError:'Nonetype' object is not iterable
    Par Mozard Yao dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 30/05/2014, 11h42
  3. [THREAD] TypeError: NoneType' object is not callable
    Par flolebreton dans le forum Général Python
    Réponses: 2
    Dernier message: 24/06/2013, 14h49
  4. TypeError: 'int' object is not iterable
    Par lewiss66 dans le forum Général Python
    Réponses: 2
    Dernier message: 18/10/2012, 16h37
  5. TypeError: 'int' object is not iterable
    Par manaliac dans le forum Général Python
    Réponses: 15
    Dernier message: 29/06/2010, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo