0

这似乎与代码的内容完全无关,所以我将保持其通用性。

我正在向我的一个模块底部的最后一个类添加多行文档字符串 - 只是为事物添加标签的东西 - 当我通过 Maya 的脚本编辑器导入模块并在该类上运行 help(module.Class) 时,我收到了这个错误:

# Error: IndexError: file C:\Program Files\Autodesk\Maya2012\bin\python26.zip\inspect.py line 568: list index out of range # 

我花了一段时间缩小导致错误的多行字符串的范围,将其缩减为使用 1 或 2 行,但除此之外失败了。我尝试将大型多行注释移至另一个类并对此提供帮助,并且效果很好,因此该注释似乎没有问题。然后我对模块中新的最后一个类进行了帮助,但它失败了。似乎接近尾声的位置是问题所在。

我将注释移回失败的类并删除了它的所有代码并执行了 help(),它运行良好。我开始重新添加方法,它一直工作到最后一个,其中只有一行代码。我改变了它的每一部分——重命名它,删除了 args,将它的一行代码换成了 pass——对类的帮助总是失败,直到我彻底删除它。帮助确实对 module.Class.method 起作用,所以方法本身及其大的多行注释似乎没问题。

然后,我将模块文件中的整个类向上移动到它之前的类之前。帮助现在为它工作。但是,现在帮助文件中的最后一个类失败了,尽管它甚至没有文档字符串。我把这门课移回最底层,开始玩最后的东西。最后一种方法似乎有问题,这意味着即使我在它们之前删除了很多 - 比最后删除的文本更多 - 我仍然会遇到问题。我在最后一个方法中添加了一个文档字符串并且帮助失败了,但是在最后三个方法中添加了一个文档字符串(只是一个“随便”)使它再次工作。这整件事完全令人费解。

这是我以某种方式错过的已知问题吗?似乎某些类/方法配置可以杀死帮助,除非所有方法 - 尤其是那些不太复杂的方法 - 都有文档字符串。

编辑以添加一小段代码作为示例:

def setLabelChangeDGC (self, control):
    control.dragCallback = self.getLabelChangeDGC(control)

那是文件中最终类的最终方法。它导致帮助崩溃。删除此方法将允许帮助再次处理该类。但是,将其保留并将类本身移动到前一个类之上会导致它再次为该类正常工作,但随后开始在文件中的新最终类上失败。

4

1 回答 1

0

当你导入 Maya 模块时说

import maya.cmds as cmds # or
import maya.mel as mel

确保您必须在每次导入结束时将其作为 cmds 或作为 mel 部分

然后你用让我们说

cmds.sphere()

maya还定义了自己的帮助功能!!!帮助()

否则你最终会混合/覆盖一些由maya定义的方法而不是python,这也可能是你得到奇怪结果的原因。

我不认为如果你将你的类移动到模块中的任何地方会产生任何影响,因为当一个对象被实例化时,它与它在 OO 代码中的位置无关......

于 2012-10-22T12:06:35.643 回答