这是我正在制作的游戏。不过我自己也看不到问题。
这是错误和两个.py文件:
C:\Users\Rickard\My Programs\Python\slutarbete\New try>main.py
Traceback (most recent call last):
File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\main.py", line 6,
in <module>
from rabbits import Rabbit
File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\rabbits.py", line
3, in <module>
import main
File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\main.py", line 6,
in <module>
from rabbits import Rabbit
ImportError: cannot import name Rabbit
main.py
# -*- coding: utf-8 -*-
import pygame, sys, random, math
from rabbits import Rabbit
from pigs import Pig
from boars import Boar
from pygame.locals import *
from threading import Timer
pygame.init()
pygame.mixer.init()
mainClock = pygame.time.Clock()
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 400
level = 1
while True:
...
和rabbits.py文件:
# -*- coding: utf-8 -*-
import pygame, sys, random, math
import main
class Rabbit(object):
rabbitCounter = 0
NEW_RABBIT = 40
RABBIT_SIZE = 64
...
我确定可以在此代码中使用其他明显错误的帮助。
答案 0 :(得分:8)
您有循环导入。在main
模块中,您尝试从rabbits
导入。但是从rabbits
你import main
开始。但是main
尚未完成导入,因此当您尝试从ImportError
模块导入任何内容时会产生rabbits
。
我不知道您为什么要在那里导入,但是您应该重新构建模块,以便rabbits
不需要main
中的任何内容。
另见Circular (or cyclic) imports in Python
对于任何包含多个模块的Python项目,您应该将其改为package。
答案 1 :(得分:5)
Python中的import语句在Python到达文件后立即执行。对于此程序,您运行main.py
,Python看到
from rabbits import Rabbit
然后Python转到rabbits.py
并看到
import main
这会导致Python循环回main.py
。 Python注意到它已经看到了这两个模块的import
语句,并决定不再尝试导入,以避免在这种情况下无限循环。
这里的解决方案是重构代码,以便rabbit.py
之外的其他模块可以访问main
的任何需求。