Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème _getitem__

    21 juin 2012 à 11:07:03

    Bonjour à tous, je fais appel à vous car je suis actuellemen t bloqué sur un code. voici où ça coince:

    class TemperatureLogger(threading.Thread):
            
    
        def __init__(self, channel_list, logger):
            ''' Class constructor
            
            '''
        self.current_temperature_list = []
            self.__end_measure = False
            
            for x in range(CANAL_NUMBER):
                self.current_temperature_list.append(-1)
            
            # Thread init
            threading.Thread.__init__(self, target = self.runModule)
            
            # Active channel
            self.active_channel = channel_list
    


    def runModule(self):
       t=TemperatureLogger(1,1)
    


    while True:
       if t.__end_measure == True:
          break
             else:
                for channel.value in range (1,9):
                   module.do_get_temp (handle, reading_buffer,times_buffer, buffer_length, overflows, channel, 0, 0)
                   if (t.active_channel[channel.value+1]<>-1):    
                            t.current_temperature_list.append("%.3f" % reading_buffer.value)
                            time.sleep(1)
    


    def main():
    ...
    t.runModule()
            
        for i in range (0,5):
            time.sleep (2)
            print t.current_temperature_list
        
        t.__end_measure = True
    


    if __name__ == "__main__":
        main()
    


    Et l'erreur:
    if (t.active_channel[channel.value+1]<>-1):
    TypeError: 'int' object has no attribute '__getitem__'


    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2012 à 11:46:15

      t=TemperatureLogger(1,1)

      1 est un int, pas une itérable ...
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        21 juin 2012 à 12:00:52

        du coup qu'est ce que je pourrais mettre ?
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2012 à 12:17:23

          t=TemperatureLogger((1,),1) mais je prévois un plantage ...
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            21 juin 2012 à 12:22:51

            effectivement, autre erreur


            if (t.active_channel[channel.value+1]<>-1):
            IndexError: tuple index out of range
            • Partager sur Facebook
            • Partager sur Twitter
              3 octobre 2012 à 15:23:52

              bonjour à tous
              j'ai un problème similaire et je n'arrive pas à comprendre. je n'ai jamais programmé en python mais le morceau de programme que je veux utiliser et modifier fait ce que je veux. Il y avait pas mal de bug au départ car il manquait la librairie PIL (pour les images).

              Voici le code en python

              # This Python file uses the following encoding: utf-8
              import os, sys

              import Image
              import ImageColor

              image='logo.bmp' #Coloque aqui o nome do arquivo que deseja converter
              texto='Imagem.txt' #Crie um arquivo texto em branco em um diretório a sua escolha e coloque aqui o nome do arquivo texto para guardar a matriz da imagem em hexadecimal
              f=open(texto,'w') #Irá abrir o arquivo texto
              imopen=Image.open(image) #Abrirá a imagem
              x=y=0
              h=0
              while y<112: #Coloque aqui a altura da imagem. A imagem do Ldg tem 125x51 pixels nb de pixel en y
              #print "y"
              x=0
              while x<115: # Coloque aqui o comprimento da imagem.nb de pixel en x
              #print "x"
              z=imopen.getpixel((x,y))
              h=0
              h = h+((z[0]/16))
              h = h+((z[1]/16))*16
              h = h+((z[2]/16))*16*16
              h=hex(h)
              #print h
              f.write(str(h))
              f.write(',')
              x=x+1
              y=y+1
              f.write('\n')
              f.close()

              l'erreur est sur la ligne en rouge et je suppose aussi sur les 2 suivantes.

              Voici le message d'erreur :

              C:\Python27>python converterbmp.py
              Traceback (most recent call last):
              File "converterbmp.py", line 20, in <module>
              h = h+((z[0]/16))
              TypeError: 'int' object has no attribute '__getitem__'


              Merci pour vos réponses



              • Partager sur Facebook
              • Partager sur Twitter
                3 octobre 2012 à 15:29:20

                z est un entier et on attend un tuple du genre (rouge,bleu,vert) ...
                en fait supprimer ces 3 lignes ne devrait résoudre le problème sans affecter le code.
                Il faut aussi remplacer la variable 'h' par 'z' dans la suite du code.
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                  3 octobre 2012 à 16:47:59

                  merci pour le conseil, en supprimant les 3 lignes et en remplaçant h par z le programme fonctionne mais le contenu du fichier généré n'est pas ce que j'attends.
                  Je devrais avoir un fichier de ce type : 0x222,0x566,0xcdd,0xfff ...
                  le premier quartet du mot est la valeur BLEU du pixel testé dans le fichier original (de 0 à F)
                  le deuxième quartet du mot est la valeur VERT du pixel testé dans le fichier original (de 0 à F)
                  le troisième quartet du mot est la valeur ROUGE du pixel testé dans le fichier original (de 0 à F)
                  Je vais encore chercher...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 octobre 2012 à 16:18:25

                    C'est bon ça marche, l’erreur n'est pas dans le code mais dans le fichier importé qui n'était pas au format RGB mais P
                    un petit test du type
                    >>>print im.format, im.size, im.mode
                    JPEG (115, 115) RGB
                    permet de voir si le fichier est au bon format.
                    Merci pour l'aide.

                    Ce code permet donc de faire un fichier texte pour envoyer une image sur un afficheur graphique
                    (Color LCD shield + Arduino).
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème _getitem__

                    × 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