Partage
  • Partager sur Facebook
  • Partager sur Twitter

IndexError: list index out of range

Au démarrage du systeme...

Sujet résolu
    22 décembre 2013 à 4:31:13

    Salut à tous !!

    Je suis aujourd'hui face à un problème dont je ne vois aucune solution... :'( et c'est après un grand périple que je viens vous demander de l'aide.

    Alors voila, j'ai un RaspBerry Pi, et je voudrais qu'un script python se lance tout seul au démarrage du Pi, voila le code (tout bête...)

    import os
    import glob
    import random
    
    listeMusic = glob.glob("music/*.ogg")
    print '\n'.join(listeMusic)
    
    while True:
    
            i = int(random.random() * len(listeMusic))
            print("\n\n=======")
            print("the next sound is: %s" %listeMusic[i])
            coma = "sox "+ listeMusic[i] +" -c 1 -r 22000 -t wav - | sudo ./PiFmDma"
            os.system(coma)
            print("The sound is finished !")

    Alors quand je suis dans le répertoire de mon script et que je fais: # python MonScript.py
    sa fonctionne nickel, tout comme je veux :3

    mais dès que je change de répertoire et que je tente de lancer mon script (avec le chemin absolue bien evidemment..) il me sort sa:

    Traceback (most recent call last):

      File "/home/pi/RaspProject/PiFmDma/FM.py", line 12, in <module>

        print("the next sound is: %s" %listeMusic[i])

    IndexError: list index out of range

    il me donne cette erreur soit à cette ligne ou à la ligne où je définis ma variable i.... pourtant i ne dépasse pas la taille de la liste...

    j'ai essayé de lancer le script avec /etc/rc.local, il me sort l'erreur et pareil quand je le lance avec crontab (http://www.raspberrypi-spy.co.uk/2013/07/running-a-python-script-at-boot-using-cron/)

    Donc voila, en gros quand je le lance "manuellement" sa fonctionne aucune erreur mais au démarrage, là où il est censé se débrouiller seul sa crash :/

    merci d'avance, Lucas

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 décembre 2013 à 9:18:16

      Pour faire le choix au hasard dans une liste, on peut utiliser choice, ça te protège de pas mal d'erreur...

      from random import choice
      
      listeMusic = glob.glob('...')
      
      ...
      
      coma = 'sox' + choice(listeMusic) + '...'



      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2013 à 10:02:32

        Salut, merci de répondre :)

        Malheureusement j'ai toujours la même erreur :

        Traceback (most recent call last):

          File "/home/pi/RaspProject/PiFmDma/FM.py", line 13, in <module>

            coma = "sox "+ choice(listeMusic) +" -c 1 -r 22000 -t wav - | sudo ./PiFmDma"

          File "/usr/lib/python2.7/random.py", line 274, in choice

            return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty

        IndexError: list index out of range

        j'ai juste supprimer la 10 et 11eme ligne
        et listeMusic[i] par choice(listeMusic) à la ligne 13......
        EDIT: Problème résolu !!!!! en fait lorsque j'execute le script quand je ne suis pas dans son repertoire, le liste ne se fait pas car elle cherche un dossier music de la où je lance le script j'ai donc mit le chemin absolue la où je définis ma liste :D
        merci !

        -
        Edité par lucastahiti 22 décembre 2013 à 10:21:46

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 décembre 2013 à 10:21:57

          Tu peux supprimer la ligne 10, 11 et aussi la 12, qui dépend de i...

          ou alors tu fais

          listeMusic = glob.glob("...")
          
          ...
          
          while True:
              music = choice(listeMusic)
              print("the next sound ..." %music
              coma = ... # remplace choice(listeMusic) par music
              os.system(...)
              print("the sound ...")
          
          



          • Partager sur Facebook
          • Partager sur Twitter

          IndexError: list index out of range

          × 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