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

L. *_*oer -1 python time pygame python-3.x

对于我正在使用的扫雷游戏time.time(),我已经导入了两个time和pygame.这是我的错误报告

line 5, in save_score
    end = time.time()
AttributeError: module 'pygame.time' has no attribute 'time'
Run Code Online (Sandbox Code Playgroud)

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

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

如果有人可以解释如何避免/修复此错误,那将非常感激.

Sco*_*ica 5

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

from pygame import *
Run Code Online (Sandbox Code Playgroud)

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

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

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

一种方法,而不是使用from pygame import *,而是使用:

import pygame
Run Code Online (Sandbox Code Playgroud)

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

您可以使用import ... as以下内容将其缩写一点:

import pygame as pg
Run Code Online (Sandbox Code Playgroud)

然后pygame.time你会这样做,而不是像你这样做pg.time.

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

from pygame import foo
Run Code Online (Sandbox Code Playgroud)

要么

from pygame import time as pygt
Run Code Online (Sandbox Code Playgroud)

但是,如果你from pygame import time或者from pygame import *,pygame中的时间将覆盖其他时间模块.