属性lat必须是显示在我的仪表板上的float

问题描述

| 我创建了一个Google AppEngine项目,该项目可以接收.txt文件,在文件中查找位置,并使用Yahoo Placemaker在地图上绘制制造商以表示.txt文件。 当我在本地主机上运行时,该项目运行正常,但是当我尝试将其上传到appspot时,出现错误:   BadValueError:属性lat必须为float 我的main.py看起来像这样:
class Story(db.Model):
    id = db.Stringproperty()
    loc_name = db.Stringproperty()
    title = db.Stringproperty()
    lat = db.Floatproperty()
    long = db.Floatproperty()
    link = db.Stringproperty()

class MyStories(webapp.RequestHandler):
    def get(self):
        temp = db.Query(Story)
        temp = temp.count()


        story_set = Story.all()

        template_values = {
            \'storyTemp\': story_set
        }

        path = os.path.join(os.path.dirname(__file__),\'index.html\')
        self.response.out.write(template.render(path,template_values))

class place(webapp.RequestHandler):
    def get(self):
        path = \'/Users/kimmasterson/storing/txtFiles\'

           try:
            for infile in glob.glob(os.path.join(path,\'*.txt\')):
                    #print infile
                    f = open(infile,\'r\')
                    data = f.read()
                    newfile = infile.replace(\'.txt\',\'\')
                    newfile = newfile.replace(\'/Users/kimmasterson/storing/txtFiles/\',\'\')
                    #print newfile
                    storyname = \'http://www.independent.ie/national-news/\' + newfile
                    #print storyname
                    #print newfile
                    #logging.info(data)
                    p = placemaker(\'HSnG9pPV34EUBcexz.tDYuSrZ8Hnp.LowswI7TxreF8sXrdpVyVIKB4uPGXBYOA9VjjF1Ca42ipd_KhdJsKYjI5cXRo0eJM-\')
                    print p.find_places(data)
                    for place in p.places:
                        splitted = place.name.split()
                        for word in splitted:
                            temp = db.Query(Story)
                            temp = temp.filter(\"link = \",storyname)
                            results = temp.fetch(limit=1)
                            if len(results) >0:
                                break
                            elif \'IE\' in word:
                                print temp
                                print \'success\'
                                story = Story(name=newfile,lat=place.centroid.latitude,long=place.centroid.longitude,link=storyname,loc_name = place.name,title = newfile).put()
        except:
            print \'error\'
            logging.info(\'BIG FAT ERROR\')

def main():
    application = webapp.WsgiApplication([(\'/\',MyStories),(\'/place\',place)],debug=True)

    wsgiref.handlers.CGIHandler().run(application)


if __name__ == \'__main__\':
    main()
我的cron.yaml:
cron:
- description: running place

  url: /place

  schedule: every day 10:00
由于某种原因,它添加了地点并将文件链接到我的本地主机上的地图。任何想法如何在两个地方的相同代码可以在一个地方而不是另一个地方工作?     

解决方法

显而易见的答案是,
lat
(您是从
place.centroid.latitude
得到的)不是浮点数。尝试登录
type(place.centroid.latitude)
来查看它是什么类型-我的猜测是它是一个字符串,您需要在其上调用
float()
进行解析。 正如@Thomas指出的那样,您显然无法引用本地计算机上的文件,并且期望该文件一旦上传到App Engine后就可以使用。而是将您的静态数据放入应用程序的根目录(或子目录)中,并使用相对路径打开它。最简单,最可靠的方法是这样的:
path = os.path.join(os.path.dirname(__file__),\'path/to/your/file\')
    ,真正显而易见的是:“ 7”-希望您不要将其完全上传到Appengine,因为显然,这在远程服务器上不起作用。 如果您打印出有关ѭ8的一些详细信息,那么在错误发生之前您会得到什么? 编辑: 查看您要执行的操作,我认为您实际上不需要上传文本文件。您正在尝试从Independent.ie网站上的故事中获取位置,对吗?您可以将URL传递给占位符:
p.find_places(\"http://www.independent.ie/national-news/patient-too-large-for-ambulance-2619414.html\")
雅虎将直接从dependent.ie获取页面,而不是从您的应用程序发送页面。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...