2017-04-27 2 views
0

Je suis confronté à un problème étrange.Random AttibuteError sur python3

J'ai changé un morceau de python2 que j'avais à python3 en utilisant 2to3.

Après cela, mon code est en cours d'exécution/défaut ... au hasard L'erreur que je reçois quand elle échoue est liée à une erreur d'attribut ... Mais python2 et dans les essais de python3 aléatoires il fonctionne, et trouver l'attribut ...

J'ai testé ce comportement sur 2 machines, exécutant les deux python3.4.

Avez-vous la moindre idée de ce qui ne va pas (je suis intrigué par cette erreur "aléatoire")?

Voici la trace que je reçois:

Traceback (most recent call last): 
File "tools/ciregs.py", line 1596, in <module> 
module = Module(json_data) 
File "tools/ciregs.py", line 1147, in \__init__ 
self.registers = [Register(json_reg, parent_module=self) for json_reg in json_module[key]] 
File "tools/ciregs.py", line 1147, in <listcomp> 
self.registers = [Register(json_reg, parent_module=self) for json_reg in json_module[key]] 
File "tools/ciregs.py", line 1260, in \__init__ 
self.fields = [Field(json_field, self) for json_field in json_reg[key]] 
File "tools/ciregs.py", line 1260, in <listcomp> 
self.fields = [Field(json_field, self) for json_field in json_reg[key]] 
File "tools/ciregs.py", line 1443, in \__init__ 
self.check()   
File "tools/ciregs.py", line 1453, in check 
if(self.bitWidth <= 0 or self.bitWidth > self.parent_reg.size()): 
File "tools/ciregs.py", line 1326, in size return self.parent_module_.width 
AttributeError: 'Module' object has no attribute 'width' 

J'ai un dictionnaire qui contient une clé « largeur ». Dans un sous-élément, je veux évaluer la taille dudit sous-élément par rapport à la largeur du haut pour voir si cela correspond.

C'est pourquoi j'essaie d'accéder à self.parent_reg.size() qui accède à la largeur et qui émet aléatoirement cette largeur d'attribut qui n'existe pas dans le dictionnaire de niveau supérieur.

Merci pour votre aide!

+2

sans le code, c'est difficile! –

+3

Ni code, ni message d'erreur - c'est un travail pour un devin. –

+0

Je suis désolé, j'essaie actuellement d'isoler un cas de test, le code impliqué est assez grand. Le message d'erreur que je reçois est (dans la version courte, voir la version complète dans mon post d'édition: ... Fichier "tools/ciregs.py", ligne 1453, en vérifiant if (self.bitWidth <= 0 ou self.bitWidth > self.parent_reg.size()): Fichier "tools/ciregs.py", ligne 1326, en taille return self.parent_module_.width AttributeError: l'objet 'Module' n'a pas d'attribut 'width' – user1654361

Répondre

0

Ok les gars, merci pour votre aide, @Bryan Oakley, votre aide m'a aidé. En fin de compte, le problème est que je reçois mes clés d'un chargement JSON I, et la charge a été faite sur un dictionnaire et non un dictionnaire trié.

L'une de mes clés, la dernière en json, appelle les fonctions qui s'attendent à ce que d'autres clés (largeur dans l'erreur signalée) soient définies. Si le dictionnaire n'est pas trié, la clé de largeur doit être définie dans certains cas avant le réglage de la dernière touche et non dans d'autres cas.

Je suis toujours perplexe pourquoi il a travaillé pour python2 ....

Merci à tous pour votre aide!