【问题标题】:BadValueError: Property year must be an int or long, not a unicodeBadValueError:属性年份必须是 int 或 long,而不是 unicode
【发布时间】:2015-08-05 18:40:02
【问题描述】:

我无法弄清楚为什么会出现此错误 --> “BadValueError: Property year must be an int or long, not a unicode”当我已经在我的出生类中使用 IntegerProperty() 时以下。我只希望我的页面允许用户输入生日,验证信息,然后在下面打印相同的生日并询问是否正确。

import os
import webapp2
import jinja2
from google.appengine.ext import db
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
                           autoescape = True)
class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
            self.response.out.write(*a, **kw)

    def render_str(self, template, **params):
            t = jinja_env.get_template(template)
            return t.render(params)

    def render(self, template, **kw):
            self.write(self.render_str(template, **kw))

    months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    def valid_month(self, month):
        months_abbvs = dict((m[:3].lower(), m) for m in self.months)
        if month:
            short_month = month[:3].lower()
            return months_abbvs.get(short_month)
    def valid_day(self, day):
        if day and day.isdigit():
            day = int(day)
            if day in range(0,32):
                return day
    def valid_year(self, year):
        if year and year.isdigit():
            year = int(year)
            if year in range(1950,2021):
                return year

class Birth(db.Model):
month = db.StringProperty(required=True)
day = db.IntegerProperty(required=True)
year = db.IntegerProperty(required=True)


class MainPage(Handler):

     def write_form(self, error="", month="", day="", year=""):
         self.render('practice.html', error=error, month=month, day=day, year=year)

     def get(self):
         self.write_form()

     def post(self):
         month = self.request.get('month')
         day = self.request.get('day')
         year = self.request.get('year')

         user_month = self.valid_month(month)
         user_day = self.valid_day(day)
         user_year = self.valid_year(year)

         if (user_month and user_day and user_year):
            a = Birth(month=month, day=day, year=year)
            a.put()
            self.redirect('/')
            birthdate = db.GqlQuery("SELECT * from Birth limit 1")
            self.render('practice.html', birthdate=birthdate)

         else:
            error="Bro, its invalid!"
            self.write_form(error, month, day, year)




app = webapp2.WSGIApplication([('/', MainPage)], 
                          debug=True)

【问题讨论】:

  • 你应该发布堆栈跟踪,它提供了有价值的信息,作为发生错误的行号。
  • 这就是它给我的全部" % (self.name, type(value).__name__)) BadValueError: Property year must be an int or long, not a unicode"
  • 它没有告诉我任何一行
  • 我的问题在于我的 post function bc,当我运行它然后单击提交按钮时,它给了我这个错误,我打破了一切!
  • 在您的post() 函数中,您正在使用valid_year() 函数检查year(字符串),该函数返回一个您分配给user_yearint,但是您正在传递你最初的year(字符串)转换成Birth(),它有一个IntegerProperty()

标签: google-app-engine


【解决方案1】:

在声明中:

a = Birth(month=month, day=day, year=year)

您使用的是原始字符串,例如year不是转换后的ints,例如user_year。这解释了您看到的错误。

【讨论】:

  • @HozaifaAbdalla,不客气!请记住按照本网站的常规礼仪接受答案(单击其左侧的复选标记轮廓)。
  • 好吧,对不起,我对堆栈溢出还很陌生!并感谢您的帮助!
猜你喜欢
  • 2012-09-26
  • 2023-03-09
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多