Bonjour,

Je dois analyser des chaines de caractères correspondant à des trames de données. Les trames étant normalisées, je peux connaitre les positions de variables à récupérer dans la chaine. Ces chaines sont de longueurs variables et certaines variables de la chaine donnent la taille de ce qu'il y a derrière.

Lors de mon analyse, j'ai voulu jouer avec les exceptions. Voici un morceau de mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
            # rsp est un indice calcule precedemment et verifie comme ne generant pas d'exception IndexError
            try:
                print "response", self.rawdata[rsp+2:rsp+4]
                self.dest_data_len = int(self.rawdata[rsp+2:rsp+4], 16)
                self.dest_data = self.rawdata[rsp+4:rsp+4+self.dest_data_len*2]
                self.dest_crc = self.rawdata[rsp+4+self.dest_data_len*2:rsp+4+self.dest_data_len*2+2]
            except IndexError:
                print "[Frame] Impossible d'analyser la reponse du destinataire"
Le problème est que, je cite la documentation :
exception IndexError

Raised when a sequence subscript is out of range. (Slice indices are silently truncated to fall in the allowed range; if an index is not a plain integer, TypeError is raised.)
et donc mes exceptions ne servent à rien si la chaine est plus petite que prévue. Comment contourner ce problème ? Je pourrais faire une tentative d'accès à l'indice maximum avant de lire la plage mais c'est quand même très contraignant... Auriez-vous une technique efficace à me proposer svp ?

Merci d'avance !