2016-11-22 5 views
-1

Для игры с тральщиком я использую time.time(), я импортировал как time, так и pygame. Вот мой отчет об ошибкесмешивание 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

У вас возник конфликт при выполнении 'from 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 time или from pygame import *, время Pygame в перезапишет другой модуль времени.