Maya脚本字符串转浮点数报错修复请求:带用户输入偏移量的动画复制粘贴功能
Maya脚本字符串转浮点数报错修复请求:带用户输入偏移量的动画复制粘贴功能
嘿,我来帮你解决这个字符串转浮点数的报错问题!
首先咱们先捋清楚报错的根源:
- 当用户点击
Cancel按钮或者直接关闭弹窗时,cmds.promptDialog()会返回None,这时候直接用float()转换肯定会抛出错误 - 如果用户输入的不是有效数字(比如字母、乱码符号),同样会触发字符串转浮点数的异常
下面是修复后的代码,我不仅处理了这些异常情况,还优化了脚本的逻辑(没必要在循环里重复复制关键帧,一次就够啦):
import maya.cmds as cmds # 获取选择的对象列表 selected_objs = cmds.ls(sl=True) # 先检查是否选够了对象:至少需要一个源对象+一个目标对象 if len(selected_objs) < 2: cmds.warning("请至少选择两个对象,第一个作为动画源,其余作为目标!") raise SystemExit() # 取第一个对象作为动画源 sel = selected_objs[0] # 获取源对象关联的动画曲线 animCurves = cmds.listConnections(sel, type='animCurve') # 检查源对象是否有动画 if not animCurves: cmds.warning(f"对象 {sel} 没有绑定动画曲线!") raise SystemExit() # 获取动画的时间范围 startTime = cmds.findKeyframe(animCurves[0], which='first') endTime = cmds.findKeyframe(animCurves[0], which='last') # 获取用户输入的偏移量 offset_input = cmds.promptDialog( title='Offset', message='Enter offset value:', button=['OK', 'Cancel'], defaultButton='OK', cancelButton='Cancel', dismissString='Cancel' ) # 判断用户是否取消了操作 if offset_input is None: cmds.info("用户取消了动画偏移操作") raise SystemExit() # 处理输入不是数字的情况 try: offset = float(offset_input) except ValueError: cmds.error("请输入有效的数字作为偏移量!") raise SystemExit() # 只需要复制一次源动画(放在循环外更高效) cmds.copyKey(sel, time=(startTime, endTime)) # 给每个目标对象粘贴带偏移的动画 for obj in selected_objs[1:]: cmds.pasteKey(obj, time=(startTime + offset, endTime + offset))
我还额外加了几个实用的前置检查:
- 确保用户至少选择两个对象,避免空列表或单对象的无效操作
- 检查源对象是否真的有动画曲线,防止后续
findKeyframe报错 - 捕获非数字输入的异常,给用户明确的错误提示
这样修改后,你的脚本就能应对各种异常场景,不会再因为字符串转浮点数出问题啦!
备注:内容来源于stack exchange,提问作者flys
相关产品推荐
相关产品推荐

