NameError:未定义全局名称“MAGIC_PINK”

时间:2013-08-19 03:58:55

标签: python python-2.7

我有一个看起来像这样的项目:

PyBlob
|- __init__
|- Actor
|- Blob
|- Bullet
|- main
|- Player
|- Scene
|- utils
|- Zombie

__初始化__。PY

import sys, pygame, cmath
from Actor import Actor
from Blob import Blob
from Bullet import Bullet
from Player import Player
from Scene import Scene
from utils import *
from Zombie import Zombie

utils.py

MAGIC_PINK = (255, 0, 255)

# plus a small handful of utility functions

Blob.py

from PyBlob import *
class Blob:
    def __init__(self, radius, body_colour=(0,0,0), face_colour=(255,255,0)):
        self.body = pygame.Surface((2*radius, 2*radius))
        self.face = pygame.Surface((2*radius, 2*radius))
        self.body.set_colorkey(MAGIC_PINK)

        #rest of module omitted for brevity

这会导致错误:

NameError: global name 'MAGIC_PINK' is not defined

导入类似乎工作得很好,所以我对这个MAGIC_PINK变量做错了。

2 个答案:

答案 0 :(得分:0)

尝试utils.MAGIC_PINK,您应该指出名称在哪个文件中

答案 1 :(得分:0)

您有循环导入。 Python必须导入PyBlob.Blob才能导入PyBlob,并且必须from PyBlob import *才能导入PyBlob.Blob。这是一个问题。

当Python尝试运行from PyBlob import *时,它发现PyBlob已经处于导入过程的中间。它不能等待PyBlob做好准备,因为PyBlob在Blob准备好之前不会准备就绪,而Blob需要PyBlob。因此,它假设PyBlob足够准备好",并在当前状态下使用它。不幸的是,PyBlob仍然缺少它应该具有的大部分内容,因此from PyBlob import *并没有获得它应该拾取的大部分内容。

要解决此问题,请重新组织代码以停止使用循环导入,并尝试避免使用import *