Invalid literal for int() with base 10: '-0.5'
Salut,
Je suis un tutoriel pour faire un jeu en python de GRAVEN : https://www.youtube.com/watch?v=ooITOxbYVTo
Mais à partir de la moitié du tutoriel, sans aucune raison apparente, on me renvoie une erreur que je n'arrive pas à comprendre :
L'erreur viendrait donc de la bibliothèque PYTMX, or je n'ai pas touché au fichier.
Quelqu'un peut me dire comment résoudre ce problème ?
Je suis un tutoriel pour faire un jeu en python de GRAVEN : https://www.youtube.com/watch?v=ooITOxbYVTo
Mais à partir de la moitié du tutoriel, sans aucune raison apparente, on me renvoie une erreur que je n'arrive pas à comprendre :
File "C:\Users\MOI\Documents\PythonPro\lib\site-packages\pytmx\pytmx.py", line 357, in _cast_and_set_attributes_from_node_items
casted_value = types[key](value)
ValueError: invalid literal for int() with base 10: '-0.5'
L'erreur viendrait donc de la bibliothèque PYTMX, or je n'ai pas touché au fichier.
Quelqu'un peut me dire comment résoudre ce problème ?
A voir également:
- Invalid literal for int() with base 10 python
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Clé d'activation windows 10 - Guide
- Restauration systeme windows 10 - Guide
- Base de registre windows 10 - Guide
- Windows 10 ne démarre plus - Guide
8 réponses
Bonjour
Dans ma boule de cristal, je vois qu'il manque une pinte à la ligne 1664.
Ha tu voulais une réponse sérieuse, ben il faut poser une question sérieuse...
A commencer par le code qui plante, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras posté correctement ton code.
Ensuite, concernant les tutos vidéos, lire ceci https://forums.commentcamarche.net/forum/affich-36859630-cours-sur-le-c#10
Dans ma boule de cristal, je vois qu'il manque une pinte à la ligne 1664.
Ha tu voulais une réponse sérieuse, ben il faut poser une question sérieuse...
A commencer par le code qui plante, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras posté correctement ton code.
Ensuite, concernant les tutos vidéos, lire ceci https://forums.commentcamarche.net/forum/affich-36859630-cours-sur-le-c#10
Tu peut m'aider ?
Peut-être mais il faut commencer par poster le code qui plante.
Le message d’erreur c’est une information importante mais ça ne suffit pas
Bonjour Whismeril,
Suite à un doublon, je m'étais permis ce matin d'essayer de préciser à quelqundebien? quiil réponde à ta demande sur le fil initial.
https://forums.commentcamarche.net/forum/affich-37564951-erreur-de-pytmx
Mais il semble qu'il persiste à demander une solution presse-bouton, assez improbable en programmation.
Je ne doute pas qu'il réfléchisse à s'inscrire dans le bon fonctionnement d'un forum.
Cordialement
Suite à un doublon, je m'étais permis ce matin d'essayer de préciser à quelqundebien? quiil réponde à ta demande sur le fil initial.
https://forums.commentcamarche.net/forum/affich-37564951-erreur-de-pytmx
Mais il semble qu'il persiste à demander une solution presse-bouton, assez improbable en programmation.
Je ne doute pas qu'il réfléchisse à s'inscrire dans le bon fonctionnement d'un forum.
Cordialement
Et je ne vous ai pas demandé de regarder la vidéo, j'ai mis le lien pour créditer l'auteur du tuto et pour prouver qu'il ne s'agit pas, comme tu le dit dans ton avertissement, d'un enfant de 12 ans.
Je voulais savoir si le problème venait de la bibliothèque ou de chez moi. Mais tant pis, je vais demander ailleurs, et je mettrai la solution si je la trouve.
Je voulais savoir si le problème venait de la bibliothèque ou de chez moi. Mais tant pis, je vais demander ailleurs, et je mettrai la solution si je la trouve.
Le problème est que le code en question fait 1500 lignes, puisqu'il s'agit de la bibliothèque PYTMX, et je ne suis pas sûre que mettre autant de ligne soit autorisé, ou même pertinent.
Serait-il possible que tu importe chez toi PYTMX ? Le code sera le même.
Quand à mon code personnel, j'ai vérifier sur un autre de mes programmes et ça me fait la même erreur, donc mon code n'as normalement rien à voir avec l'erreur.
Serait-il possible que tu importe chez toi PYTMX ? Le code sera le même.
Quand à mon code personnel, j'ai vérifier sur un autre de mes programmes et ça me fait la même erreur, donc mon code n'as normalement rien à voir avec l'erreur.
Je ne te demande pas le code entier, mais le bloc qui plante.
Sauf si dans les 2 cas tu l’as mal utilisé
Quand à mon code personnel, j'ai vérifier sur un autre de mes programmes et ça me fait la même erreur, donc mon code n'as normalement rien à voir avec l'erreur.
Sauf si dans les 2 cas tu l’as mal utilisé
Ok quel est le contenu de items?
Si tu ne sais pas, fait un print(items) juste avant le for et copie colle le résultat
Si tu ne sais pas, fait un print(items) juste avant le for et copie colle le résultat
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
OK. Donc ça plante là oui, mais le problème vient « d’avant »
A priori cette fonction fait partie d’une classe.
Elle permet d’affecter des attributs de la classe à partir d’un dictionnaire (items).
Cette classe possède un attribut qui s’appelle offsety qui normalement est un int, et dans le dictionnaire il y a
Le problème étant que cette valeur n’est pas un nombre mais du texte.
Une conversion décimale -> entier ne devrait pas créer de plantage, un mauvais résultat peut-être.
Mais avec le texte, la fonction appelée « derrière » (sans doute dans settattr) est une conversion de texte vers int et là c’est pas possible.
Il faut donc que tu trouves le code qui appelle la fonction _cast_and_set_attributes_from_node_items et voir si le dictionnaire y est créé ou rempli.
Et si oui trouver pourquoi il y a cette mauvaise valeur.
Et si ça vient d’encore avant, il faut remonter jusqu’à « la source ».
Si ton IDE permet de mettre des points d’arrêt et d’avancer pas à pas, tu peux aussi dans un premier temps essayer de cibler un « moment » d’exécution clé et avancer en pas à pas jusqu’à trouver le moment où cette valeur est assignée.
A priori cette fonction fait partie d’une classe.
Elle permet d’affecter des attributs de la classe à partir d’un dictionnaire (items).
Cette classe possède un attribut qui s’appelle offsety qui normalement est un int, et dans le dictionnaire il y a
'-0.5'
Le problème étant que cette valeur n’est pas un nombre mais du texte.
Une conversion décimale -> entier ne devrait pas créer de plantage, un mauvais résultat peut-être.
Mais avec le texte, la fonction appelée « derrière » (sans doute dans settattr) est une conversion de texte vers int et là c’est pas possible.
Il faut donc que tu trouves le code qui appelle la fonction _cast_and_set_attributes_from_node_items et voir si le dictionnaire y est créé ou rempli.
Et si oui trouver pourquoi il y a cette mauvaise valeur.
Et si ça vient d’encore avant, il faut remonter jusqu’à « la source ».
Si ton IDE permet de mettre des points d’arrêt et d’avancer pas à pas, tu peux aussi dans un premier temps essayer de cibler un « moment » d’exécution clé et avancer en pas à pas jusqu’à trouver le moment où cette valeur est assignée.
C'est bon !
De ce que tu m'as dit, la value de la clé 'offsety' devrait être un float et non un str.
Au lieu de fouiller partout, j'ai modifié moi-même la value :
C'est un peu bourrin, mais ça marche !
Merci beaucoup, j'étais vraiment coincée.
De ce que tu m'as dit, la value de la clé 'offsety' devrait être un float et non un str.
Au lieu de fouiller partout, j'ai modifié moi-même la value :
def _cast_and_set_attributes_from_node_items(self, items): for key, value in items: if key == 'offsety' : value = -0.5 casted_value = types[key](value) setattr(self, key, casted_value)
C'est un peu bourrin, mais ça marche !
Merci beaucoup, j'étais vraiment coincée.
Non non, ça n'est surtout pas une solution
D'abord, par ce que cette fonction fait partie d'un package auquel tu n'as pas à toucher.
Ensuite parce que l'erreur ne vient pas de là.
Et encore parce que dans un jeu, il est très rare qu'une classe n'ait qu'une seule instance.
En faisant ça toutes les instances auront le même offset en Y et y'a toutes les chances que ça mette la garouille.
Et enfin, et surtout, parce que le job de cette fonction c'est de remplir des attributs à partir de valeur en string. L'attribut offsety doit représenter un int, or en y mettant un float il y aura forcément un mauvais résultat => la valeur finale sera soit 0 soit -1 et donc le résultat ne sera pas ce que tu attends.
Bref, le problème vient que tu donnes à cette fonction de mauvais paramètres, il faut trouver pourquoi et corriger la fourniture
D'abord, par ce que cette fonction fait partie d'un package auquel tu n'as pas à toucher.
Ensuite parce que l'erreur ne vient pas de là.
Et encore parce que dans un jeu, il est très rare qu'une classe n'ait qu'une seule instance.
En faisant ça toutes les instances auront le même offset en Y et y'a toutes les chances que ça mette la garouille.
Et enfin, et surtout, parce que le job de cette fonction c'est de remplir des attributs à partir de valeur en string. L'attribut offsety doit représenter un int, or en y mettant un float il y aura forcément un mauvais résultat => la valeur finale sera soit 0 soit -1 et donc le résultat ne sera pas ce que tu attends.
Bref, le problème vient que tu donnes à cette fonction de mauvais paramètres, il faut trouver pourquoi et corriger la fourniture
Comme dit plus haut, il faut contrôler le premier argument qui est passé à la fonction
Dans le cas de Quelquundebien, le problème est plus profond comme le souligne Whismeril : cette erreur est la conséquence d'une erreur faite en amont, qui amène à propager vers cette fonction un mauvais argument.
Pour plus d'information, il faudrait voir le code dans son ensemble (ou plus exactement, remonter la pile d'appel de fonctions et contrôler les arguments qui ont été propagés pour identifier la fonction coupable). Dans son message, Quelquundebien n'a reporté que la dernière fonction de la pile d'appel, mais il y en a sûrement plusieurs autres avant. Il au faudrait insérer au début de chaque fonction mise en jeu ajouter
Bonne chance
int, qui n'est probablement ni un type numérique, ni une chaîne dont le contenu correspond à un entier. Voici quelques exemples qui montrent ce qu'on a le droit ou pas d'écrire :
x = int(5) # OK x = int(5, base=10) # OK x = int(-0.5) # OK x = int(-0.5, base=10) # Pas OK x = int("5", 10) # OK x = int("-0.5", 10) # Pas OK
Dans le cas de Quelquundebien, le problème est plus profond comme le souligne Whismeril : cette erreur est la conséquence d'une erreur faite en amont, qui amène à propager vers cette fonction un mauvais argument.
Pour plus d'information, il faudrait voir le code dans son ensemble (ou plus exactement, remonter la pile d'appel de fonctions et contrôler les arguments qui ont été propagés pour identifier la fonction coupable). Dans son message, Quelquundebien n'a reporté que la dernière fonction de la pile d'appel, mais il y en a sûrement plusieurs autres avant. Il au faudrait insérer au début de chaque fonction mise en jeu ajouter
print(locals()). Cela permettrait de voir jusqu'où les arguments semblent corrects et ainsi identifier la fonction qui a introduit un mauvais argument.
Bonne chance
'
Je précise que je n'ai évidemment pas touché ce fichier, et que l'erreur est apparu après avoir posé des collisions avec TILED. Mais je suis pas sûre que il y ai un lien.
Merci, je savais pas comment faire. Et pour le tuto ne t'inquiète pas je sais faire la différence entre un bon tuto et un tuto nul.
Tu peut m'aider ?