2015-10-05 1 views
0

Я пытаюсь создать переменную, содержащую список моих локаторов и сеток в Maya. Таким образом, у меня есть этоОшибка при создании переменной в Maya

locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)# Give me the list of locators 
meshes = cmds.listRelatives(cmds.ls(type= 'mesh'), p=1) #Give me the list of all meshes 

Но они имеют тенденцию работать только в том случае, если на сцене имеется локатор или поли. Майя выплевывает ошибку:

line 1: Object [] is invalid 

если нет локаторов или поли.

Как сохранить их на работу, даже если они доступны на сцене или нет? Целью является создание инструмента поиска и замены. Таким образом, художник может искать и заменять только сетки, если захочет. Но сейчас это ошибка, даже когда я только S & R meshes. Локаторы дают ошибку, когда я ищу сетки, а Meshes терпят неудачу, когда я ищу локаторы.

Ниже весь мой поиск и заменить код:

def searchAndReplace(self): 
    searchText = str(self.windowObj.myLookFor.text()) #My search text feild 
    replaceText = str(self.windowObj.myRepFor.text()) #My replace text feild 
    selection = cmds.ls(sl=True) #only selected items 
    locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1)# Give me the list of locators 
    meshes = cmds.listRelatives(cmds.ls(type= 'mesh'), p=1) #Give me the list of all meshes 
    joints = cmds.ls(type = 'joint')# Give me the list of my joints. 
    allObjects = locators, meshes, joints 

    if len(selection) > 0: 
     if self.windowObj.myRepAll.isChecked(): 
      print "All is selected" 
      for object in meshes: 
       if object.find(searchText) != -1: 
        newName = object.replace(searchText, replaceText) 
        cmds.rename(object, newName) 
        self.listofMeshes.append(meshes) 
       else: 
        print "No mesh found. Skipping meshes" 
      for object in locators: 
       if object.find(searchText) != -1: 
        newName2 = object.replace(searchText, replaceText) 
        cmds.rename(object, newName2) 
        self.listofLocators.append(locators) 
       else: 
        "No locators found. Skipping locators" 
      for object in joints: 
       if object.find(searchText) != -1: 
        newName3 = object.replace(searchText, replaceText) 
        cmds.rename(object, newName3) 
        self.listofJoints.append(joints) 
       else: 
        print "No joints found. Skipping joints" 

Нужна помощь в магазине переменные правильно, поэтому он может хранить локаторы, сетки и суставы правильно и быть в состоянии использовать его, если один из них не доступен в сцене.

ответ

0

Когда я запускаю два утверждения, которые вы указали в новой пустой сцене, я получаю None на обеих переменных.

В этом случае, прежде чем начать цикл, вы могли бы предотвратить ошибку углубленной каждый цикла в, например, если сетки:, или что еще лучше, если isinstance (сетки, список):, который будет выполнять только код, если сетки список:

if isinstance(meshes, list): 
    for object in meshes: 
     if object.find(searchText) != -1: 
      newName = object.replace(searchText, replaceText) 
      cmds.rename(object, newName) 
      listofMeshes.append(meshes) 

Если вы все еще получаете ту же ошибку при попытке выполнить операторы, отступы, что в Try/поймать блок, чтобы увидеть более подробное объяснение о что происходит, и получить дополнительную помощь от Maya CMDS' documentation:

try: 
    locators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1) 

except Exception as e: 
    print e 
0

По умолчанию, если cmds.listRelatives ничего не находит вместо того, чтобы возвращать пустой [], как и ожидалось, он вернется None.

два способа исправить это будет либо преобразовать None к []:

print cmds.listRelatives(cmds.ls(type= 'locator'), p=1) or [] 
> returns [] 

или выполнить проверку условие, чтобы увидеть, если переменная пуста:

sceneLocators = cmds.listRelatives(cmds.ls(type= 'locator'), p=1) 
if sceneLocators: 
    print 'Continue' 
else: 
    print 'No locators!' 

Вы не должны оберните tryexcept, как утверждает Карлос. Это всего лишь плохая практика программирования в целом с некоторыми исключениями и, как правило, ленивый способ заниматься вещами.