Python列表索引越界:为何or无法提供备选值(Maya场景)
问题解析与解决方案
为什么or运算符在这里不生效?
因为Python的运算优先级是先执行索引操作,再处理or逻辑。拿你给出的示例来说:
a = ["something",] b = a[1] or "empty"
代码会先尝试访问a[1],但列表a只有索引0的元素,直接触发IndexError,根本没机会走到or "empty"的判断环节。or是在左边表达式产生结果后才会生效,而这里左边操作直接报错中断了执行。
你试的b, = a[1] or "empty"同理,核心还是先执行a[1],所以依然会触发越界错误。
一行代码实现Maya文件名提取(兼容Python 2.7)
针对你要获取不带路径和扩展名的文件名的需求,用条件表达式先判断场景是否已保存,再处理路径即可:
import os name = os.path.splitext(os.path.basename(cmds.file(q=True, sn=True)))[0] if cmds.file(q=True, sn=True) else ""
逻辑说明:
- 若场景已保存,
cmds.file(q=True, sn=True)返回完整路径,先通过basename提取带扩展名的文件名,再用splitext拆分扩展名,取第一个元素就是纯文件名; - 若场景未保存(返回空字符串),直接赋值空字符串,避免后续路径操作触发错误。
如果不想重复调用cmds.file,可以用匿名函数实现单次调用的一行写法:
import os name = (lambda fp: os.path.splitext(os.path.basename(fp))[0] if fp else "")(cmds.file(q=True, sn=True))
内容的提问来源于stack exchange,提问作者Lauloque
相关产品推荐
相关产品推荐

