这是在谷歌应用程序引擎模型:我使用整数还是浮点数?
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,
))
我得到的是
result.mCOUNT,
TypeError: a float is required
为什么线103 TypeError
mCOUNT会浮动吗?顺便提一下,只有当该项目不在数据存储中时才会引发错误,并且该错误是由if loop
的else
子句第一次写入的。
你能帮我使用正确的类型吗?谢谢你的帮助。
-----------------------------------------------------
编辑
我只注意到我有%f
字符串格式化mWEIGHT
和更改到%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
子句?
------------------------------------------------------------
整个代码如下:
K = []
s = self.request.get('sentence')
K.append(s)
K = f2.remove_empty(K[0].split('\r\n'))
UNIQUES = f2.f2(K)
COUNTS = f2.lcount(K, UNIQUES)
C_RESULT = "no results yet"
for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
rep = C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
age1 = datetime.datetime.now() - rep.mDATE0
age_hour = float(age1.seconds)/3600
rep.mWEIGHT = float((rep.mCOUNT - 1)/(age_hour + 2)**1.5)
self.response.out.write("<b>rep.UNIQUE: %s</b>: <br />"
# "rep.mCOUNT: %s <br />"
"rep.mWEIGHT: %s <br />"
# "C_RESULT: %s <br />"
# "rep: %s <br />"
# "utc_tuple: %s <br />"
# "mDATE0_epoch: %s <br />"
"rep.mDATE0: %s "
"age_hour: %s <br />"
#
% (rep.mUNIQUE,
# rep.mCOUNT,
rep.mWEIGHT,
# C_RESULT,
# rep,
# utc_tuple,
# mDATE0_epoch,
rep.mDATE0,
age_hour,
))
rep.put()
else:
rep = Rep()
rep.mCOUNT = COUNTS[i]
rep.mUNIQUE = UNIQUES[i]
rep.put()
self.response.out.write("<b>rep.UNIQUE: %s</b>: |"
"rep.mCOUNT: %s: <br />"
% (rep.mUNIQUE,
rep.mCOUNT,))
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,
result.mCOUNT,
))
什么是其中引发异常的最后一个字符串插值类型和result.mWeight的价值? – 2010-11-15 00:36:09
试试将它作为一个浮动。 '浮子(rep.mCount)'。 – Falmarri 2010-11-15 00:40:12
@Falmarri:我只是试过这个;但它不起作用。我得到了同样的错误。谢谢。 – Zeynel 2010-11-15 01:17:07