Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Problème d'execution

IDE eclipse.

Sujet résolu
    13 août 2008 à 22:07:19

    Bonjour,

    Hier soir j'ai voulu tester l'IDE Eclipse avec le module de développement Python, j'avais besoin d'un programme et comme j'en avait plus sous la main, je me rappelais d'un exercice du cour Python (de G.Swinnen) à propos des fichier.

    L'énoncé demandais de créer un programme qui demande le nom du fichier, ensuite demandais à l'utilisateur si il voulait écrire ou lire dans le fichier avec quelques détails. Je me souvenais vaguement du code que j'ai écrit, mais j'ai réussi à le refaire (enfin il étais 4H du matin donc j'ai fait que la moitié), donc voici le fameux code :

    from os import chdir
    chdir("C:\Documents and Settings\Administrateur\Bureau")
    
    print "bienvenue"
    nameFile = raw_input("entrez le nom du fichier:")
    
    choix = input()
    
    if choix == 1 :
        monFichier = open(nameFile, "a")
        while 1 :
                texte = raw_input("entrez votre texte:")
                monFichier.write(texte)
                monFichier.write("\n")
                if texte == "" :
                    break
        monFichier.close()
    


    Donc pour tester, je sélectionne Run as => Python run. Il commence exécuter le code, au moment ou j'indique que mon choix est 1, il me met le message d'erreur suivant :

    Citation : Pas de titre

    Traceback (most recent call last):
    File "C:\Documents and Settings\Administrateur\workspace\test\src\tkintertest.py", line 7, in <module>
    choix = input()
    File "<string>", line 1
    1

    ^
    SyntaxError: unexpected EOF while parsing





    J'ai chercher à modifier le code, mais rien à faire, alors j'ai lancer IDLE, j'ai fait un Copier-Coller du code dans IDLE, je lance le Run, sous IDLE sa marche très bien.

    Auriez-vous une petite idée, d'où le problème pourrais venir ?

    Je vous remercie par avance de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      13 août 2008 à 22:19:59

      J'ai pas Eclipse sous la main, y'a pas un bout de sa doc qui expliquerait l'exécution de code Python en détail ?

      idée à deux balles : mets choix = input(""), il est peut être capricieux...
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2008 à 22:27:02

        Chez moi il n'y a pas de problèmes. Ceci dit je te conseille d'utiliser int(raw_input()) plutôt qu'input ;) .
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 août 2008 à 23:12:50

          Bonsoir,

          A mon avis tu devrais relire le tuto de Swinnen.

          C'est la base! tu trouveras certainement ce qu'il te manque dans ton code ;)
          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2008 à 23:23:11

            remplace input() par int(raw_input())
            • Partager sur Facebook
            • Partager sur Twitter
              13 août 2008 à 23:26:27

              Bonsoir,

              Citation : Stakhanov

              J'ai pas Eclipse sous la main, y'a pas un bout de sa doc qui expliquerait l'exécution de code Python en détail ?

              idée à deux balles : mets choix = input(""), il est peut être capricieux...



              J'ai essayer, sa ne marche pas, sa affiche toujours la même erreur.

              Citation : nicknick63

              Chez moi il n'y a pas de problèmes. Ceci dit je te conseille d'utiliser int(raw_input()) plutôt qu'input ;) .



              J'ai essayer comme tu m'a dit, mais sa m'affiche une nouvelle erreur, mais plus sur le input, mais sur la ligne de l'ouverture du fichier :

              Traceback (most recent call last):
              File "C:\Documents and Settings\Administrateur\workspace\test\src\tkintertest.py", line 8, in <module>
              objetFichier = open(nomDuFichier, "a")
              IOError: [Errno 2] No such file or directory: 'dere\r'


              Donc la j'ai taper nameFile (au hasard) "dere", mais je sait pas pourquoi il rajoute un \r a chaque fois...

              j'ai refait un peu mon code, pour voir si c'était pas un problème d'indentation profiter pour changer le nom de l'objet, et des variable pour m'éviter de me mélanger :

              from os import chdir
              chdir("C:\Documents and Settings\Administrateur\Bureau")
              
              print "bienvenue dans le programme"
              nomDuFichier = raw_input("entrer le nom du fichier:")
              choix = int(raw_input(""))
              if choix == 1 :
                  objetFichier = open(nomDuFichier, "a")
                  while 1:
                      text = raw_input("entrer votre texte:")            
                      objetFichier.write(text)
                      objetFichier.write("\n")
                      if text == "" :
                          break
                  objetFichier.close()
              





              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                13 août 2008 à 23:29:32

                essaye de mettre

                objetFichier = open(nomDuFichier, "w")
                


                au lieu de 'a'
                • Partager sur Facebook
                • Partager sur Twitter
                  13 août 2008 à 23:33:06

                  Citation : Stakhanov

                  essaye de mettre

                  objetFichier = open(nomDuFichier, "w")
                  



                  au lieu de 'a'



                  J'ai essayer, c'est toujours la même chose, et je veut ajouter du contenue, pas le remplacer =)

                  Merci quand même !

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    13 août 2008 à 23:41:52

                    Citation

                    remplace input() par int(raw_input())



                    Pourquoi?

                    >>> nbre=input('entrer un nombre :')
                    entrer un nombre :3
                    >>> type (nbre)
                    <type 'int'>
                    


                    Swinnen dit : "On peut invoquer la fonction input() en laissant les parenthèses vides. On peut aussi y placer en argument un message explicatif destiné à l'utilisateur"

                    >>> a=input()
                    'bonjour'
                    >>> a
                    'bonjour'
                    >>> a=input()
                    1
                    >>> type(a)
                    <type 'int'>
                    


                    Une question : Est-ce que le fichier est déjà créé ou va-t-il etre créé?

                    Swinnen dit : La méthode close() referme le fichier. Celui-ci est désormais disponible pour tout usage.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 août 2008 à 23:45:29

                      Citation : fred1599

                      Citation

                      remplace input() par int(raw_input())



                      Pourquoi?

                      >>> nbre=input('entrer un nombre :')
                      entrer un nombre :3
                      >>> type (nbre)
                      <type 'int'>
                      



                      Swinnen dit : "On peut invoquer la fonction input() en laissant les parenthèses vides. On peut aussi y placer en argument un message explicatif destiné à l'utilisateur"

                      >>> a=input()
                      'bonjour'
                      >>> a
                      'bonjour'
                      >>> a=input()
                      1
                      >>> type(a)
                      <type 'int'>
                      



                      Une question : Est-ce que le fichier est déjà créé ou va-t-il etre créé?

                      Swinnen dit : La méthode close() referme le fichier. Celui-ci est désormais disponible pour tout usage.



                      Oui, j'ai compris le int(raw_input()) sans Swinnen^^, c'est une question de logique.
                      le fichier va etre créer mais je vais tester avec un fichier déja créer !

                      EDIT : même avec un fichier déja créer il me renvoit la même erreur. Je comprend pas pourquoi il ajoute un "\r" a la fin du nom du fichier
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        13 août 2008 à 23:50:23

                        Je n'ai pas testé, mais je pense que pour traiter ton fichier il faut utiliser la méthode close(), et dans ton cas tu ne l'utilises que en cas de "break" de ta boucle, tu comprends?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 août 2008 à 23:55:51

                          Citation : fred1599

                          Je n'ai pas testé, mais je pense que pour traiter ton fichier il faut utiliser la méthode close(), et dans ton cas tu ne l'utilises que en cas de "break" de ta boucle, tu comprends?



                          Pour essayer ta suggestion, j'ai essayer d'exécuter ceci :

                          from os import chdir
                          chdir("C:\Documents and Settings\Administrateur\Bureau")
                          
                          print "bienvenue dans le programme"
                          nomDuFichier = raw_input("entrer le nom du fichier:")
                          choix = int(raw_input())
                          if choix == 1 :
                              objetFichier = open(nomDuFichier, "w")
                              objetFichier.close()
                          


                          mais le problème reste toujours le même, y'a toujours ce fameux "\r" qui s'ajoute a la fin du nom du fichier...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            13 août 2008 à 23:59:19

                            En fait ton programme est correct et n'a besoin de rien d'autre que d'avoir une personne en face qui sait ce qu'elle fait!!!

                            Pas besoin de methode close(), il te faut juste savoir ce que ton programme demande

                            Tu rentres ton nom de fichier et ensuite un blanc n'est ce pas. Rentre juste la valeur 1 attendue, puis tape ton texte

                            Ca fonctionne!!!

                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 août 2008 à 0:11:04

                              Citation : fred1599

                              En fait ton programme est correct et n'a besoin de rien d'autre que d'avoir une personne en face qui sait ce qu'elle fait!!!

                              Pas besoin de methode close(), il te faut juste savoir ce que ton programme demande

                              Tu rentres ton nom de fichier et ensuite un blanc n'est ce pas. Rentre juste la valeur 1 attendue, puis tape ton texte

                              Ca fonctionne!!!



                              ...je sait que mon programme fonctionne, je l'ait tester sous IDLE. Je sait ce qu'il fait aussi, c'est quand même moi qui l'ait écrit.. . Mais je veut comprendre pourquoi sous l'IDE eclipse mon programme ne fonctionne pas !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 août 2008 à 0:16:03

                                Bon, première chose : input(), c'est moche et obsolète dans un mois, vire ça tout de suite et remplace le par un eval(raw_input()) si tu veux le comportement exactement identique, ou int(raw_input()) si tu veux juste un entier.

                                Deuxième chose, Eclipse sous Windows semble avoir du mal avec les \r\n, et laisse donc des \r à la fin des lignes envoyées à Python. Je te conseille donc de faire un strip() sur toutes tes entrées, comme par exemple int(raw_input().strip()), ou nom_fichier = raw_input().strip().

                                Si ça ne résoud pas ton problème, je ne vois vraiment pas, désolé.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 août 2008 à 0:24:45

                                  Citation : wgmpgp

                                  Bon, première chose : input(), c'est moche et obsolète dans un mois, vire ça tout de suite et remplace le par un eval(raw_input()) si tu veux le comportement exactement identique, ou int(raw_input()) si tu veux juste un entier.

                                  Deuxième chose, Eclipse sous Windows semble avoir du mal avec les \r\n, et laisse donc des \r à la fin des lignes envoyées à Python. Je te conseille donc de faire un strip() sur toutes tes entrées, comme par exemple int(raw_input().strip()), ou nom_fichier = raw_input().strip().

                                  Si ça ne résoud pas ton problème, je ne vois vraiment pas, désolé.



                                  C'est la bonne solution le .strip() !

                                  Merci beaucoup ! A tous !

                                  Bonne continuation !
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    14 août 2008 à 0:36:46

                                    Purée il etait sous windows, je savais pas

                                    Enfin bon j'aurais pas trouvé cette méthode là je n'ai jamais utilisé eclipse sur windows.

                                    je ne vois pas comment eclipse sous windows peut voir des espaces en debut ou fin de chaines de caracteres???

                                    Mais bon, c'est une astuce super bien trouvée ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      14 août 2008 à 0:39:55

                                      Citation : fred1599

                                      Purée il etait sous windows, je savais pas

                                      Enfin bon j'aurais pas trouvé cette méthode là je n'ai jamais utilisé eclipse sur windows.

                                      je ne vois pas comment eclipse sous windows peut voir des espaces en debut ou fin de chaines de caracteres???

                                      Mais bon, c'est une astuce super bien trouvée ;)


                                      Héhé, c'est le \r qui m'a mis sur la voie :) . Il n'y avait pas de grandes chances (comprendre aucune) qu'il soit sous Mac OS (car je n'ai jamais vu ce genre de bugs là bas), j'en ai donc conclu que PyDev ne strippait que les \n en fin de ligne d'entrée, et qu'il restait donc des \r rémanents en fin de chaîne. Pour les éviter, un bon coup de strip, et ça passe (bon par contre, ça vire les espaces en début et fins de lignes, s.rstrip('\r') aurait probablement été plus adapté :p ).
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        14 août 2008 à 13:23:01

                                        wgpgp m'a grillé, j'étais sur la voie, le même problème a déjà été résolu sur le forum :) .

                                        Par contre je suis (encore :'( ) sous Windows, et je n'ai plus ce problème. As-tu la toute dernière version d'Eclipse ? Si non, télécharge là (et fait la mise-à-jour de PyDev ensuite).
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        [Python] Problème d'execution

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown