TypeError:不支持的操作数类型 - :'unicode'和'unicode',coords

时间:2013-01-13 21:53:54

标签: python html database unicode

完整代码为HERE

HTML代码

<input type="hidden" id="Latitude" name="Latitude" value={{Longitude}} />
<input type="hidden" id="Longitude" name="Longitude" value={{Longitude}} />

document.getElementById("Latitude").value  =  position.coords.latitude;
document.getElementById("Longitude").value =  position.coords.longitude;    

app.py

Latitude = request.form['Latitude']
Longitude = request.form['Longitude']

messages = database.returnMessagesinRange(float(Latitude),float(Longitude))

database.py

def returnMessagesinRange(longitude,latitude):
    allMessages = Messages.find()
    messagesinRange = []
    for current in allMessages:
        if ((current['longitude']-longitude) * (current['longitude']-longitude) + (current['latitude']-latitude)*(current['latitude']-latitude)) <= 1:
            if messagesinRange == None:
                messagesinRange = [current['text']]
            else:
                messagesinRange.append(current['text'])
    return messagesinRange

当这个运行时,我得到

if ((current['longitude']-longitude) * (current['longitude']-longitude) + (current['latitude']-latitude)*(current['latitude']-latitude)) <= 1:
TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode'

任何人都知道为什么会这样吗?感谢。

4 个答案:

答案 0 :(得分:7)

从请求和数据库中检索的经度和纬度都是字符串(unicode字符串),并且您尝试对它们进行操作,就像它们是数字一样。

您应首先获得此类字符串的intfloat表示,以便能够将其作为数字运行(使用-*等)

您可以通过创建将字符串作为参数传递的intfloat对象来实现此目的

latitude = int(request.form['Latitude'])

latitude = float(request.form['Latitude'])

答案 1 :(得分:2)

与PHP不同,Python不会自动从字符串转换为float。使用:

errors = []
try:
    latitude = float(request.form['Latitude'])
except ValueError:
    # do something about invalid input
    latitude = 0.0
    errors.append(u"Invalid input for Latitude.")

答案 2 :(得分:1)

current['longitude']longitude都是unicode字符串。如果您打算将它们减去,则需要将它们转换为float

答案 3 :(得分:0)

好的,我们这样做了..

def returnMessagesinRange(longitude,latitude):
allMessages = Messages.find()
longitude = (eval(str(longitude)))
latitude = (eval(str(latitude)))
messagesinRange = []
for current in allMessages:
    y=eval(str(current['longitude']))
    x=eval(str(current['latitude']))
    if ((longitude-x)*(longitude-x))+((latitude-y)*(latitude-y)) <= 1:
        if messagesinRange == None:
            messagesinRange = [str(current['text'].encode('ascii','ignore'))]
        else:
            messagesinRange.append(str(current['text'].encode('ascii','ignore')))
return messagesinRange

最后我可以看到结局!