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 :

erreur sur ma fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Par défaut erreur sur ma fonction
    voici le traceback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Traceback (most recent call last):
      File "C:\Users\alain\OneDrive\Bureau\jeu_python\main.py", line 4, in <module>
        from game import Game
      File "C:\Users\alain\OneDrive\Bureau\jeu_python\game.py", line 3, in <module>
        from monster import Monster
      File "C:\Users\alain\OneDrive\Bureau\jeu_python\monster.py", line 3, in <module>
        import animation
      File "C:\Users\alain\OneDrive\Bureau\jeu_python\animation.py", line 26, in <module>
        'mummy': load_animation_images('mummy')
      File "C:\Users\alain\OneDrive\Bureau\jeu_python\animation.py", line 18, in load_animation_images
        image_path = path + num + '.png'
    TypeError: can only concatenate str (not "int") to str
    et mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def load_animation_images(sprite_name):
        #charger  les 24 images dans le dossier
        images = []
        # recuperer le chemin de ce dossier
        path = f"assets/{sprite_name}/{sprite_name}"
        #boucler sur chaque image
        for num in range(1, 24):
            image_path = path + num + '.png'
            images.append((pygame.image.load(image_path)))
     
            #renvoyer  le contenu de la liste
        return images

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    l'exception est explicite. Elle se lit du bas en haut.
    TypeError: can only concatenate str (not "int") to str
    puis en remontant:
    File "C:\Users\alain\OneDrive\Bureau\jeu_python\animation.py", line 18, in load_animation_images
    image_path = path + num + '.png'
    Le problème se situe donc ligne 18: num est de type int et doit être convertie en type str afin de pouvoir concaténer la chaine de caractère qui constitue ton image_path...

    Ce que tu peux visualiser avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> "abc"+"def"
    'abcdef'
    >>> "abc"+"def"+1
    Traceback (most recent call last):
      File "/usr/lib/python3.8/idlelib/run.py", line 559, in runcode
        exec(code, self.locals)
      File "<pyshell#1>", line 1, in <module>
    TypeError: can only concatenate str (not "int") to str
    >>> "abc"+"def"+"1"
    'abcdef1'
    >>>

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Comme le dit Hominidé, tu ne peux concaténer que des strings. Donc la solution est de convertir num en str au moment où tu veux le concaténer.
    Ou alors tu pars dans une autre direction en jouant sur le formatage des strings pour créer ton path => image_path = "%s%d.png" % (path, num). Remarque quelque part ça reste une conversion de num en string...
    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
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ou alors tu pars dans une autre direction en jouant sur le formatage des strings pour créer ton path => image_path = "%s%d.png" % (path, num).
    Ou bien avec les fstrings dont j'affectionne l'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image_path = f"{path}{num}.png"

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Ou bien avec les fstrings dont j'affectionne l'écriture
    Ca j'ai pas bien l'habitude encore (goûts et couleurs).
    Mais je viens de remarquer que les fstrings incluent aussi le formatage, chose que je ne savais pas (je pensais que c'était l'un ou l'autre)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> f"xxx{2+3}yyy%d" % (2*3)
    'xxx5yyy6'
    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]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Mais je viens de remarquer que les fstrings incluent aussi le formatage, chose que je ne savais pas (je pensais que c'était l'un ou l'autre)
    C'est encore plus que çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> f'{2 + 3 = :.2f}'
    '2 + 3 = 5.00'
    ou avec des variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a, b = 2,3
    >>> f'{a + b = :.2f}'
    'a + b = 5.00'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par Sve@r Voir le message
    Mais je viens de remarquer que les fstrings incluent aussi le formatage
    A noter qu'il est possible de créer sont propre formatage sur une classe ; combiné avec les fstrings c'est particulièrement pratique, c'est quelque chose que j'utilise assez souvant (ex: f"client:nom" ... f"client:telephone") pour remplacer une méthode type onjet.value_str()

    Exemple bidon:
    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
    class Nombre:
        def __init__(self, data: int):
            self.data = data
     
        def __format__(self, format_spec: str) -> str:
            ret = ("zero", "un", "deux", "trois", "quatre", "cinq")
            if format_spec.endswith("fr"):
                try:
                    #format_spec = format_spec[:-2]+""
                    #return f"{self.data:{format_spec}}"
                    return ret[self.data]
                except IndexError:
                    return "?"
            else:
                return f"{self.data:{format_spec}}"
     
     
    x = Nombre(5)
    print(f"j'ai {x.data} ans")
    print(f"j'ai {x} ans")
    print(f"j'ai {x: >+20_.2f} ans")
    print(f"j'ai {x:fr} ans")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    j'ai 5 ans
    j'ai 5 ans
    j'ai                +5.00 ans
    j'ai cinq ans

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Par défaut
    ok merci pour votre éclairage, en fait sur mon cours il donnait la réponse plus loin je suis trop pressé, lol.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    tu ne peux concaténer que des strings.
    https://www.delftstack.com/fr/howto/...sts-in-python/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de message d'erreur sur une fonction SNMP
    Par kriptoo dans le forum Langage
    Réponses: 1
    Dernier message: 18/05/2007, 01h08
  2. Erreur sur la fonction getdate()
    Par obydissonn dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/04/2007, 11h48
  3. [MySQL] Erreur sur la fonction mysql_result()
    Par nico26 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/01/2007, 15h50
  4. erreur sur une fonction
    Par rimbaut dans le forum C
    Réponses: 3
    Dernier message: 01/04/2006, 17h28
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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