如何为 Python 中的表达式命令格式化 MEL 表达式字符串?

How to format a MEL expression string for the expression command in Python?

我在使用 python 脚本创建 Maya MEL 表达式时遇到问题。我需要能够根据输入到某些 GUI 组件中的值来格式化表达式,但是当我尝试格式化包含 "if statement" 的表达式时,会出现一些冲突。看一看:

revol_int = self.revol_int.value()

revolExpression = pm.expression(o=rigRevol, s='if (frame%8 == 0) {rz = (frame//{0}) * ((360/{1}.000)/2.000);}'.format(interv_int, revol_int))

表达式在手动输入时有效,但是当通过脚本格式化完成时,由于包含 if 语句代码块的“{}”,我得到一个 KeyError。所以我尝试了另一种格式化方法:

revol_int = self.revol_int.value()

revolExpression = pm.expression(o=rigRevol, n='olr_revolutions_expression', s='if (frame%8 == 0) {rz = (frame//%s) * ((360/%s.000)/2.000);}' % (interv_int, revol_int))

但在这种情况下,我得到一个 # ValueError:索引 11 处不支持的格式字符 ' ' (0x20)。我很不确定从这里去哪里。任何建议将不胜感激。

您需要包含另一个 % 以用作第一个百分比的转义字符。否则 Python 会对如何计算字符串感到困惑。

'if ( (frame%%8) == 0) {rz = (frame/%s) * ((360/%s.000)/2.000);}' % (interv_int, revol_int)