浮点数和lambda - 获取类型错误,需要浮点数

时间:2015-03-14 04:43:54

标签: python django highcharts lambda

我正在努力让Chartit使用我的Django项目。我发现它不支持x轴上的日期时间(它返回一个错误,并说“不是JSON可序列化的”。)因此,为了解决这个问题,我试图在使用lambda函数的this hack中工作。 (我也修改了那里指定的chartit python代码。)

这一行给出了错误,“TypeError:需要浮点数。”

x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))

以下是该功能的相关部分:

cht = Chart(
            datasource = happydata,
            series_options =
            [{'options':{
            'type': 'line',
            'stacking': False},
            'terms':{
            'day': [
            'rating',]
            }}],
            chart_options =
            {'title': {
            'text': 'Ratings'},
            'xAxis': {
            'title': {
            'text': 'Time'}}}, 
        x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))

我读了lambda函数,但我不确定为什么我会收到这个错误。任何帮助非常感谢!感谢。

跟踪,按要求:

    Traceback:
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
      111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "C:\Users\MYSTUFF\projects\feels2\feelsapp\views.py" in home
      82.       x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))
    File "C:\Python27\lib\site-packages\chartit\charts.py" in __init__
      25.         self.generate_plot()
    File "C:\Python27\lib\site-packages\chartit\charts.py" in generate_plot
      200.                                 data = [(x_mapf(x), y) for (x, y) in data]
    File "C:\Users\MYSTUFF\projects\feels2\feelsapp\views.py" in <lambda>
      82.       x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))

Exception Type: TypeError at /
Exception Value: a float is required

views.py

def home(request):
    #Create a DataPool with the data we want to retrieve.

    feels = Feel.objects.all()

    happydata = \
        DataPool(
            series=
            [{'options': {
            'source': Feel.objects.all()},
            'terms': [
            'day',
            'rating']}
        ])


    cht = Chart(
            datasource = happydata,
            series_options =
            [{'options':{
            'type': 'line',
            'stacking': False},
            'terms':{
            'day': [
            'rating',]
            }}],
            chart_options =
            {'title': {
            'text': 'Your Ratings'},
            'xAxis': {
            'title': {
            'text': 'Time'}}}, 
        x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(float(i)).strftime("%H:%M"), False))

    return render_to_response('happy.html',{'happychart': cht})

1 个答案:

答案 0 :(得分:2)

@wwii是正确的,如果它的lambda给你错误,你可能传入一个字符串。应该可以使用任何int或float,尝试:

lambda i: datetime.fromtimestamp(float(i)).strftime("%H:%M")
编辑:看到您对@wwii的评论,看起来您可能没有传递实数。您应该尝试在代码中的某处添加print语句,并在创建该图表之前检查“i”的值。