【问题标题】:Imports not working in Google App Engine project导入在 Google App Engine 项目中不起作用
【发布时间】:2013-05-24 15:57:40
【问题描述】:

我在 python 中工作以使用 GAE 构建一个 webapp。该项目最初是在没有 GAE 的情况下构建的,并且效果很好,然后我将这些文件带入 GAE 项目,突然之间它们不再那么好用了。一个文件 land.py 有 4 个代表不同土地类型的类,以及一个列表列表,其中包含每个类的多个实例。它们都基于land 类,在land.py 文件中。

class Land():
    def __init__(self):
        self.elevation = 0
        self.neighbors = []
        self.creatures = []
        self.location = (0, 0)
        self.was = None#to keep track of when flooded     
    def __str__(self):
        return("location " + str(self.location) + 
               " elevation " + str(self.elevation) + 
               " neighbors " + str(len(self.neighbors)) + 
               " creatures " + str(x.name for x in self.creatures) + " | ")
    def redefine(self, land):
        self.elevation = land.elevation
        self.neighbors = land.neighbors
        self.creatures = land.creatures
        self.location = land.location
        self.was = land

另一个类simulation.py导入land,应该可以用,但是当我尝试时

self.map =  Land.landMass(the list of list's)    
for row in self.map: 
        print(row)

它将打印'[,,,,,,,][,,,,,,,][,,,,,,,][,,,,,,,]' 它确实看到那里有对象,因为当我这样做时

for i in self.map:
            for x in i:
                output += x.__str__()

它打印每个陆地对象的正确输出。这是一个问题,因为当我想检查时

for row in self.map:
    for column in row: 
        if isinstance(land, Land.Water):  #or type(land) 

它首先不知道什么是土地,但它也知道什么是 Land.Water。如果您愿意,我可以提供代码,但很难准确找出问题所在。同样,在它自己的项目文件中它一切正常,但在 GAE 项目中却没有。有人知道为什么吗?

【问题讨论】:

    标签: python eclipse google-app-engine python-2.7


    【解决方案1】:

    print(row) 正在执行 repr(object) 而不是 str(obj) 如果您查看页面的源代码,您会看到类似

    至于您的其余代码,如果不知道 Land 的定义,就很难说清楚。 Land 是 db/ndb 模型吗?

    此外,您对这个问题的标题与您提出的问题没有任何关系。我认为导入没有任何问题。

    关于“它首先不知道土地是什么”的具体问题,我假设您收到的是 NameError name 'land' is not defined ,如果没有,请提供有关错误的更多详细信息。如果是正确的错误,你在哪里定义land?

    这行看起来也有问题 if isinstance(land, Land.Water): or type(land) 会给你一个 SyntaxError

    【讨论】:

    • 不,Land 是一个常规的 .py 文件,其中包含一些基于 Land 类的类,我将在上面添加。
    • 当我尝试打印 str(type(x)) 或 str(type(Land.Water)) 时,我没有收到 nameError,我什么也没收到,它什么也没打印。
    • 您是在查看网页的输出还是 appengine 日志。您不会在打印的日志中得到任何内容。您使用的是哪种请求处理程序。
    • 我正在检查网页上的输出。我正在使用 sim = Simulation(text, generation, lengthOfDay)#.simulate() ... self.write("
      %s
      " % sim) 其中 Sim 最终成为 Simulation 的 str 函数
    • 好吧,您通常不能将 print 与 self.write 混合使用。查看我之前提到的页面源代码,您将看到列表的 repr() 输出。你应该试着把你的问题集中在一件事上。你有很多事情要做,我觉得你在一些基本的 appengine/webapp 基础上遇到了麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多