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

为什么字典查找触发'unhashable type'错误但直接传入硬编码值正常?

报错原因

你遇到的核心问题是两个看起来值相同的对象,实际类型完全不同:

  • 硬编码写入的(255, 0, 0, 255)是Python原生元组(tuple),属于不可变类型,满足字典键的可哈希要求。
  • pygame.Surface.get_at()返回的是pygame.Color类的实例,并非元组。该类的实例在多数pygame版本中被定义为不可哈希,直接作为字典键就会触发unhashable type错误。

你看到的打印结果一致,是因为pygame.Color重写了字符串转换方法,打印时会输出和RGBA元组完全相同的格式,只是视觉上和元组一致,本质类型完全不同。你可以添加一行代码验证类型差异:

print(type(colour_under_mouse)) # 输出结果为 <class 'pygame.Color'>,而非 <class 'tuple'>
解决方法

只需要将拿到的pygame.Color实例显式转换为元组,再作为字典的键查询即可:

colour_under_mouse = pygame.Surface.get_at(screen, mouse_pos)
colour_selected = d_colours[tuple(colour_under_mouse)]

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:36:03