混合pygame.time()和time.time()

时间:2016-11-22 15:49:24

标签: python python-3.x time pygame

对于我使用time.time()的扫雷游戏,我已导入timepygame。这是我的错误报告

line 5, in save_score
    end = time.time()
AttributeError: module 'pygame.time' has no attribute 'time'

这里你有证据证明我确实导入了时间和pygame:

import sys, math, time
def save_score(name, size, mine):
    end = time.time()
~
from pygame import *

如果有人能解释如何避免/修复此错误,我们将不胜感激。

1 个答案:

答案 0 :(得分:5)

由于您的行,您遇到了命名空间冲突:

from pygame import *

这会污染您的全局命名空间,包含您可以从pygame导入的所有内容。它使懒惰的生活变得简单 - 你不必引用特定的命名空间来使用pygame的功能。但它也有一些不好的后果。

在这种情况下,您已将“time”作为全局命名空间中的模块导入。当您从pygame导入时,它有一个名为time的子模块。 pygame.time取代你的常规时间模块。

解决此问题的方法是正确使用模块/命名空间。

这样做的一种方法是使用:

,而不是使用from pygame import *
import pygame

但是你必须将pygame放在pygame函数或模块的每个引用前面。这通常是好的,这样你和其他任何阅读你代码的人都知道你正在调用的函数。

您可以使用import ... as

将其缩写一点
import pygame as pg

然后,您可以执行pygame.time

,而不是执行pg.time之类的操作

如果您想要专门放入全局命名空间,可以执行以下操作:

from pygame import foo

from pygame import time as pygt

但如果你执行from pygame import timefrom pygame import *,pygame的时间将覆盖其他时间模块。