Maya Python skinCluster return 类型不是字符串?

Maya Python skinCluster return type not string?

我正在尝试检查对象上是否有 skinCluster。我的代码非常基础。这是一个例子:

cmds.select(d=True)
joint = cmds.joint()
skinnedSphere = cmds.polySphere(r=2)
notSkinnedSphere = cmds.polySphere(r=2)

skinTestList = [skinnedSphere, notSkinnedSphere]

# Bind the joint chain that contains joint1 to pPlane1
# and assign a dropoff of 4.5 to all the joints
#
cmds.skinCluster( joint, skinnedSphere, dr=4.5)

for obj in skinTestList:

    objHist = cmds.listHistory(obj, pdo=True)

    skinCluster = cmds.ls(objHist, type="skinCluster")

    if skinCluster == "":
        print(obj + " has NO skinCluster, skipping.")
    else:
        print obj, skinCluster
        #cmds.select(obj, d=True)

我的问题是,即使它找不到 skincluster,它仍然打印出 "obj, skincluster" 而不是它找不到 skinCluster 的错误。

我以为一个skinCluster returns一个字符串。所以如果字符串为空,它应该打印出错误而不是 "obj, skincluster".

如有任何帮助,我们将不胜感激!

这是一个典型的 Maya 问题 -- 问题是 Maya 经常想给你列表,而不是单个项目,即使你知道结果应该是单个项目。这意味着您最终要编写一堆代码来从 one-item 列表中获取一个项目,或者避免因尝试将索引放入空列表而导致的错误。

你已经掌握了基础知识,是 == "" 把你搞得一团糟:

for obj in skinTestList:
     objHist = cmds.listHistory(obj, pdo=True)
     skinCluster = cmds.ls(objHist, type="skinCluster") or [None]
     cluster = skinCluster[0]
     print obj, cluster

or [None] 保证您总是会得到一个包含 某些内容 的列表,因此使用 [0] 获取单个值是安全的. None 在这里是一个很好的 return 值,因为(如评论中所指出的)您可以 if cluster: 并跳过空值。