【问题标题】:AttributeError: 'module' object has no attribute 'locals'AttributeError:“模块”对象没有属性“本地”
【发布时间】:2014-09-13 21:41:34
【问题描述】:

我正在尝试阅读“使用 Python 和 Pygame 制作游戏”一书,在尝试第一个 blankgame.py 示例时收到此错误消息。当我使用

从 pygame.locals 导入 *

我没有错误

如果 event.type == QUIT:

但是。如果我尝试过

如果 event.type == pygame.locals.QUIT

没有在开头导入并执行,发生错误。任何人都可以帮我解决这个问题,并告诉我事先导入和使用 QUIT 的完整常量路径引用之间的区别。

谢谢。

【问题讨论】:

  • pygame.locals 中的所有内容现在都是本地的,因此您不需要前缀来引用它们。

标签: python compiler-errors pygame


【解决方案1】:
from pygame.locals import *

这会将“pygame.locals”中的所有内容导入您的本地命名空间。因此,您将访问该模块的成员,就好像它们在您自己的当前命名空间中一样。因此,您不应在调用前加上 pygame.locals。如果您使用 pygame.locals.QUIT 之类的前缀调用,则会出错。

import pygame.locals

这将从 'pygame.locals' 加载所有内容,但不会加载到您的命名空间中。您仍然需要在调用前加上 'pygame.locals',例如 pygame.locals.QUIT。

在不使用上述导入的情况下使用 pygame.locals.QUIT 会导致错误,因为它从未加载模块 pygame.locals

【讨论】:

  • 嗨@user3885927!非常感谢您的帮助,它确实解决了我的问题。顺便问一下,即使我在开头写了import pygame,那我是不是也要写import pygame.locals
  • Jiaweik,这取决于 pygame.__init__ 是如何实现的。例如,您可以import os 然后使用os.path.exists,因为 os 使 os.path 可用。经验法则是:遵循文档中的示例,或者只是尝试一下,看看它是否有效,或者查看 init.py 文件。
猜你喜欢
  • 2010-11-18
  • 2018-08-28
相关资源
最近更新 更多