【发布时间】: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_year的int,但是您正在传递你最初的year(字符串)转换成Birth(),它有一个IntegerProperty()。