类型错误:不支持这些操作数的减法运算 - 'unicode' 和 'unicode',坐标

6

完整代码在这里

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'

有人知道这是为什么吗?谢谢。

你的错误与你的代码不匹配:唯一的减法是 current['longitude']-longitude(current['latitude']-latitude)。除非你在其他地方调用了你的函数,否则 longitudelatitude 是浮点数,但 current['latitude']current['longitude'] 可能是 unicode。这将导致错误 TypeError: unsupported operand type(s) for -: 'unicode' and 'float' - Eric
是的,你的一个问题在这里 - Eric
4个回答

8
从请求和数据库中检索到的经度和纬度都是字符串(Unicode字符串),你试图将它们作为数字进行操作。
你应该首先获取这些字符串的或表示,以便能够将它们作为数字进行操作(使用-*等)。
您可以通过创建一个或对象并将字符串作为参数传递来实现这一点。
latitude = int(request.form['Latitude'])

或者

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

2

与 PHP 不同的是,Python 不会自动将字符串转换为浮点数。请使用:

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

1

current['longitude']longitude都是unicode字符串。如果您计划对它们进行减法运算,您需要将它们转换为float


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

终于我能看到结尾了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接