这是Google App Engine中的模型:
class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.StringProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now=True)
mDATE0 = db.DateTimeProperty(auto_now_add=True)
mWEIGHT = db.FloatProperty()
因此,mCOUNT
是整数,mWEIGHT
是浮点数。我像这样计算项目的年龄:
age1 = datetime.datetime.now() - rep.mDATE0
age_hour = float(age1.seconds) / 3600
rep.mWEIGHT = float((rep.mCOUNT - 1) / (age_hour + 2)**1.5)
但是当我尝试这样的查询时:
QUERY = Rep.all()
QUERY.filter("mAUTHOR =", user)
QUERY.order("-mWEIGHT")
RESULTS = QUERY.fetch(10)
for result in RESULTS:
self.response.out.write("mUNIQUE: <b>%s</b> | "
"mWEIGHT: %f | "
"mCOUNT: %s | <br />"
% (result.mUNIQUE,
result.mWEIGHT,
# line 103
result.mCOUNT,
))
我在第103行得到TypeError
result.mCOUNT,
TypeError: a float is required
为什么mCOUNT会浮动?顺便说一下,只有当项目不在数据存储区中并且第一次由else
的{{1}}子句写入时,才会引发错误。
你能帮我使用正确的类型吗?谢谢你的帮助。
if loop
修改
我刚注意到我-----------------------------------------------------
的字符串格式%f
,将其更改为mWEIGHT
似乎解决了问题(但我不知道原因。是不是因为{ {1}}):
%s
以下是一些价值观:
mWEIGHT=None
有关如何将for result in RESULTS:
self.response.out.write("mUNIQUE: <b>%s</b> | "
# changing %f to %s appears to solve the problem.
"mWEIGHT: %f | "
"mCOUNT: %s | <br />"
% (result.mUNIQUE,
result.mWEIGHT if result.mWEIGHT is not None else 0.0,
result.mWEIGHT,
result.mCOUNT,
))
添加到mUNIQUE: A | mWEIGHT: 0.299954933969 | mCOUNT: 2 |
mUNIQUE: Z | mWEIGHT: 0.0 | mCOUNT: 1 | # With answer by TokenMacGuy
mUNIQUE: R | mWEIGHT: None | mCOUNT: 1 | # with %f changed to %s
mUNIQUE: P | mWEIGHT: None | mCOUNT: 1 | # with %f changed to %s
条款的任何建议吗?
rep.mWEIGHT
整个代码如下:
else
答案 0 :(得分:1)
看起来您偶尔不设置mWEIGHT
。如何改变
for result in RESULTS:
self.response.out.write("mUNIQUE: <b>%s</b> | "
"mWEIGHT: %f | "
"mCOUNT: %s | <br />"
% (result.mUNIQUE,
result.mWEIGHT,
result.mCOUNT,
))
到
for result in RESULTS:
self.response.out.write("mUNIQUE: <b>%s</b> | "
"mWEIGHT: %f | "
"mCOUNT: %s | <br />"
% (result.mUNIQUE,
result.mWEIGHT if result.mWEIGHT is not None else 0.0,
result.mCOUNT,
))