【发布时间】:2022-01-04 09:16:16
【问题描述】:
我将我的 Maya 工具从 python2 移植到 python3 并遇到了一个问题,我一直在使用 set() 删除列表中的重复条目。以前这很好用,但现在我得到了:
TypeError: unhashable type: 'MeshUV'
列表包含 pymel MeshUV 对象,可能如下所示:
[MeshUV('Right_Hand.map[1011]'), MeshUV('Right_Hand.map[1012]'),
MeshUV('Right_Hand.map[1013]'), MeshUV('Right_Hand.map[1014]')]
Klaus D 要求使用最少的代码来得到这个错误,所以在 Maya 中使用它并选择一些 uvs。
import pymel.core as pm
uvs = pm.ls(sl=True, fl=True)
set(uvs)
我不知道为什么这突然成为一个问题,但也许有任何快速的替代方法可以使用 set 删除重复项,或者我是否可以以某种方式更改列表以使其再次工作?
编辑:所以在 martineau 的回应之后,我认为这是 Maya 2022 的变化,而不是 python3 本身,即使这是他们进行切换时的 Maya 版本。
【问题讨论】:
-
请创建一个可重现的最小示例并向我们展示完整的错误回溯!
-
MeshUV显然不是hashable。 -
在 Python 2 和 3 之间没有任何改变会影响这一点,即它在 Python 2 中也不会工作——还有其他问题。
-
详细信息也会有所帮助:你说它在 Python 2 中工作,但在同一版本的 Maya 或其他版本的 Maya 下?尝试使用 -pythonver 2 命令行参数运行相同的 Maya,看看它是否有效。