2016-11-22 93 views
-1

對於我正在使用time.time()的掃雷遊戲,我導入了timepygame。這是我的錯誤報告混合pygame.time()和time.time()

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

你從'pygame import *'執行''時有衝突(檢查http://stackoverflow.com/questions/9916878/importing-modules-in-python-best-practice) – fredtantini

回答

5

您遇到了一個命名空間衝突,由於您的線路:

from pygame import * 

這是你可以從pygame的進口一切污染您的全局命名空間。它使懶惰的生活變得簡單 - 你不必引用具體的命名空間來使用pygame的函數。但它也有一些不好的後果。

在這種情況下,您已將「時間」作爲模塊導入到全局名稱空間中。當你像從pygame那樣導入時,它有一個稱爲時間的子模塊。 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的的時間將覆蓋其他時間模塊。