2016-11-22 13 views
-1

私はtime.time()を使用している掃海艇の試合では、timepygameの両方をインポートしました。pygame.time()とtime.time()を混ぜる

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

誰もがこのエラーを修正/回避する方法を説明することができた場合、それははるかになりたい:ここに私のエラーレポートを使用すると、私は、インポート時とpygameの両方をした証拠を持っている。ここ

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

です感謝。

+1

'〜からpygame import *'を実行すると競合します(http://stackoverflow.com/questions/9916878/importing-modules-in-python-best-practiceを参照) – fredtantini

答えて

5

あなたが原因あなたの行に、名前空間の衝突に遭遇している:

from pygame import * 

これはpygameのからインポートすることができますすべてのものを使用してグローバルな名前空間を汚染しています。それは怠惰な生活を楽にします - あなたはpygameの機能を使うために特定の名前空間を参照する必要はありません。しかしそれには悪い結果もあります。

この場合、グローバル名前空間のモジュールとして「時間」をインポートしていました。あなたがパイゲームから行ったようにインポートすると、それは時間と呼ばれるサブモジュールを持っていました。 pygame.time通常の時間モジュールを置き換えます。

これを修正する方法は、モジュール/名前空間を適切に使用することです。これを行うには

一つの方法は、代わりにfrom pygame import *を使用してのものであり、代わりに使用します。

import pygame 

しかし、その後、あなたはpygameの機能やモジュールへのすべての参照の前にpygameのを配置する必要があります。これは一般的には良いことです。コードを読んだあなたと他の誰かが、あなたが呼んでいる機能を正確に知っているということです。

あなたはimport ... asを使用して、それを少し短縮することができます。

import pygame as pg 

代わりpygame.timeのような物事の後、あなたがpg.timeを行うだろう。

あなたが特にグローバル名前空間に配置するいくつかのものがある場合は、のようなものを行うことができます:あなたはfrom pygame import timefrom pygame import *をすれば、pygameのダウンロードの時間を

from pygame import foo 

または

from pygame import time as pygt 

しかし、他の時間モジュールを上書きします。