【问题标题】:TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode', coordsTypeError: 不支持的操作数类型 -: 'unicode' 和 'unicode', coords
【发布时间】:2012-12-27 20:01:07
【问题描述】:

完整代码是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))

数据库.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'] 可能是unicodes。这将给出错误TypeError: unsupported operand type(s) for -: 'unicode' and 'float'
  • 是的,你的问题之一是here

标签: python html database unicode


【解决方案1】:

好的,我们做到了,这很有效..

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

终于可以看到结局了!

【讨论】:

    【解决方案2】:

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

    您应该首先获取此类字符串的intfloat 表示,以便能够将它们作为数字进行操作(使用-* 等)

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

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

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

    【讨论】:

      【解决方案3】:

      与 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.")
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-16
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-21
          • 2015-07-05
          相关资源
          最近更新 更多