You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:02:44