处理 ls() 结果

使用 ls() 作为过滤器有时可以产生奇数结果。如果你不小心忘记传递过滤器参数并调用没有参数的 ls(),你将获得 Maya 场景每个节点的列表 :

 cmds.ls()
 # [u'time1', u'sequenceManager1', u'hardwareRenderingGlobals', u'renderPartition'...] etc

一个常见的原因是在 ls() 中使用* args:

cmds.ls(["fred", "barney"]) # OK, returns ['fred', 'barney']
cmds.ls([]) # OK, returns [] 
cmds.ls(*[]) # not ok: returns all nodes!

Maya 2015 及更早版本

在 Maya 2015 及更早版本中,找不到任何内容的 ls() 查询将返回 None 而不是空列表。如果使用结果,可能会导致异常:

 for item in cmds.ls("don't_exist"):
     print item
 # Error: TypeError: file <maya console> line 1: 'NoneType' object is not iterable 

解决这个问题最干净的习惯用法是在 ls() 操作后添加 or [] 时返回 None 时添加替代输出。这将确保返回是一个空列表而不是 None

 for item in cmds.ls("don't_exist") or []:
     print item
 # prints nothing since there's no result -- but no exception