Hope you find some of these python code tips helpful.
A small tip to figure out what exception to catch is to type the
bug case and read output for the error type in Maya's script editor. This helped me alot to figure out we get a TypeError if select something not on scene.
Here are a couple examples.
#dont exist try exception TypeError cmds.select('joint7') # Error: Object joint7 is invalid # Traceback (most recent call last): # File "
", line 1, in # TypeError: Object joint7 is invalid # #more than one object of that name try catching RuntimeError cmds.rename('joint2','joint1') # Error: More than one object matches name # Traceback (most recent call last): # File " ", line 1, in # RuntimeError: More than one object matches name # #
Here are some code ideas to rename joint hierarchy to form
(pre_1_joint,pre_2_joint …) by first selecting root of joint hierarchy and typing
##@file rename.py # #(Tested Maya 2008) # #@author Nathaniel Anozie # import maya.cmds as cmds def renameJointHierarchyByRoot_unitTest(): j1=cmds.joint(p=[0,0,0]) j2=cmds.joint(p=[1,0,0]) j3=cmds.joint(p=[2,0,0]) cmds.select(j1,replace=True) renameJointHierarchyByRoot() ##rename joint hierarchy inserting number note requires root to be selected on scene #@note underscore automatically included ## def renameJointHierarchyByRoot( prefix='pre', suffix='joint'): curSel = cmds.ls(selection=True) root = cmds.ls(selection = True) #hold all the joints in hiearchy here allJoint =  try: base = root cmds.select(base,replace=True) allHierarchy = cmds.select(hierarchy=True) allJoint = cmds.ls(selection = True, type = 'joint') except IndexError: print "Requires a root input (root) or selection" #add increasing integer to name giving format prefix_integer_suffix allJointName= for i in range(len(allJoint)): try: joint = allJoint[i] cmds.select(joint,replace=True) try: jointName = prefix+'_'+str(i+1)+'_'+suffix allJointName.append(jointName) cmds.rename(joint,jointName) except RuntimeError: print "Require Single Occurence of Joint >> %s" %joint except TypeError: print "Require Existence of Joint >> %s" %joint #replace current selection if len(allJointName) > 0: try: cmds.select(allJointName,replace=True) except TypeError: print "Skipping Restore Selection, Requires Single Occurence of Joint >> %s" %allJointName
Inspired By Matt Estela (tokeru dot com) for learning about IndexError exception
Inspired By Steven F.Lott (slott-softwarearchitect dot blogspot dot com) for learning about raising notimplementedError
Inpired By James Parks (arcsecond dot net) for learning about list handling