错误:无法将字符串转换为float - Django

时间:2014-07-27 22:48:55

标签: python django floating-point

这是我在Django中编写的小型统计应用程序的代码。我需要从网页读取字符串输入,将逗号分隔值解析为浮点列表。我一直得到相同的错误。 这是我得到的错误:

Environment:


Request Method: GET
Request URL: http://localhost:8000/

Django Version: 1.4
Python Version: 2.7.6
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'statistics')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args,             **callback_kwargs)
File "C:\Users\Utsav.Chinka-PC\Documents\Visual Studio     2010\Projects\StatCalc\StatCalc\statistics\views.py" in calculate
  9.     string = [float(x) for x in string]

    Exception Type: ValueError at /
    Exception Value: could not convert string to float: 

这是我的 view.py

from django.shortcuts import render_to_response
import stat_func

def calculate(request):
    query = request.GET.get('q','')
    string = query.split(',')
    error=0
    map(float,string)


    output = []
    output = stat_func.calc(string)
    output[9]=1

return render_to_response("templates/stat_page.html", {
         "results": output,
         "query": query
          })

即使这似乎也不起作用:

string = [float(x) for x in string]

刚接触Django我不得不花费大量时间在这上面,并且无法解决这个问题。请帮忙!

1 个答案:

答案 0 :(得分:1)

你没有拥有查询字符串;您的网址参数没有q=参数:

Request URL: http://localhost:8000/

因此,当您尝试从请求中获取不存在的query参数时,q将设置为空字符串:

query = request.GET.get('q','')

此字符串无法转换为浮点值:

>>> ''.split(',')
['']
>>> float('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 

您必须处理查询为空的情况,而不是尝试将其解析为浮点值。

如果您实际传入了q参数,那么您的代码可以正常工作:

http://localhost:8000/?q=0.42,8.181

并实际存储了map()调用的结果:

float_values = map(float, string)

然后使用float_values中的浮点值列表做了一些有意义的事情。