这是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号线上得到一个
result.mCOUNT,
TypeError: a float is required

为什么mCOUNT是float?顺便说一下,只有当项不在数据存储中并且是第一次由TypeErrorelse子句写入时,才会引发错误。
你能帮我用正确的字体吗?谢谢你的帮助。
-----------------------------------------------------

编辑
我刚刚注意到我已经为if loop设置了%f的字符串格式,将其更改为mWEIGHT似乎解决了这个问题(但我不知道为什么)。是因为%s:
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

有什么建议可以添加到mWEIGHT=None子句中吗?
------------------------------------------------------------

整个代码如下:
    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,
                                ))

最佳答案

看起来您偶尔没有设置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,
                                ))

关于python - 我使用整数还是浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4180566/

10-11 11:35