2010-04-21 4 views
1

Je travaille sur un module d'extension Python, et un de mes petits scripts de test est en train de faire quelque chose d'étrange, à savoir .:Pourquoi ai-je une erreur TypeError en boucle?

x_max, y_max, z_max = m.size 

for x in xrange(x_max): 
    for y in xrange(y_max): 
     for z in xrange(z_max): 
      #do my stuff 

Ce qui ne fait aucun sens que la boucle arrive à la fin du premier ' z 'itération, puis lance un TypeError, indiquant qu' "un entier est requis". Si je mets un essai ... sauf TypeError et vérifie les types de x, y et z, ils reviennent tous comme < taper 'int'>.

Ai-je oublié quelque chose ici?

EDIT: Il semble que j'ai un problème quelque part dans mon code d'extension. Tirer ces lignes une par une a révélé le coupable. Je suspecte une erreur de comptage de référence. Merci pour les réponses.

+0

Qu'est-ce que 'm.size'? – Seth

+0

Est-ce que '# do my stuff' réattribue' z_max'? Bien que vous ne nous montriez pas correctement la traceback, il semble que le problème est avec l'une des variables '_max' - pas les trois seules lettres que vous avez vérifiées! -) –

+0

pourquoi n'utilisez-vous pas' range () 'est la liste trop longue? – corn3lius

Répondre

0

Le problème est ici: x_max, y_max, z_max = m.size

Cette syntaxe x_max, y_max, z_max attend un tuple/liste à l'autre bout du signe d'égalité de sorte que si m.size est l'un - et je le prends c'est un entier - vous avez besoin de ce qui suit :

x_max = y_max = z_max = m.size

+0

Si 'm.size' n'était pas un type de séquence, il aurait obtenu un' TypeError' avant de lancer la boucle. – Seth

+0

Ah, oui. Je suppose que j'ai raté cette partie. – ktdrv

Questions connexes