2013-06-07 3 views
2

J'essaie de définir les ombres de trace de rayon dans Maya on/off via une fonction, cette fonction est lue dans une liste de défilement de texte (qui est les lumières de la scène). me donnant l'erreur suivante ligne 106: objet 'NoneType' n'est pas itérable #Maya useRayTraceShadows - Erreur Python L'objet NoneType n'est pas itérable

chose étrange que j'ai utilisé le même code pour définir des attributs à la lumière (s) et son fonctionnement, mais pas pour celui-ci, le code est ci-dessous, toute aide sera appréciée.

Ubuntu 12.04 & Python 2.7

def RT_ShadowsOff():

selectedLights = cmds.textScrollList ("lgtList", query = True, selectItem = True) 

for lgt in selectedLights: 
    cmds.setAttr(lgt+".useRayTraceShadows", False) 

Répondre

1

NoneType n'Iterable signifie presque toujours que vous avez demandé une liste et Maya vous avez rendu un 'Aucun' au lieu d'un vide liste. Vous pouvez contourner l'erreur dans le code ci-dessus avec

selectedLights = cmds.textScrollList ("lgtList", query = True, 
             selectItem = True) or [] 

qui retournera toujours une liste, bien que la liste sera vide si rien est sélectionné dans votre interface utilisateur.

Pour en savoir plus sur la façon de gérer les retours de type liste dans Maya, voir ma réponse à this thread

+0

Merci beaucoup pour la réponse rapide, votre modification du code a fonctionné parfaitement ... alors est-ce une mauvaise pratique de le faire c'est comme ça pour le reste du code? ... je veux dire, devrais-je revenir en arrière et modifier les autres fonctions même si elles fonctionnent? – John

+0

J'essaie de le faire partout, car cela rend le code beaucoup plus propre: chaque 'ou []' vous sauve au moins un 'si ' ailleurs (et mentionné dans l'autre article), il est facile de gérer les arguments variables de manière cohérente. OTOH - si ce n'est pas cassé ... :) Si cela a résolu le problème pour vous rappeler de marquer il a répondu de sorte que d'autres le voient à l'avenir – theodox

+0

encore une fois ... merci beaucoup mec ... Je vais le marquer répondu pour sûr :) – John

Questions connexes