求解:python出现错误TypeError:TypeError: object of type 'int' has no len()怎么解决

yss5930381 2018-08-31 04:33:11
...全文
10338 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DP_ChenPeng 2019-11-18
  • 打赏
  • 举报
回复
按照上面二楼老哥方法改了一下源码 line_chart.x_labels = x_unique ->line_chart.x_labels = [str(_) for _ in x_unique] 这样编译就不会再出现类型错误了
weixin_45563617 2019-10-16
  • 打赏
  • 举报
回复
引用 3 楼 wuxiajuan126的回复:
我也是初学者,下面是我的解决代码,定义了两个函数,一个取数据,一个画图,楼主出现的错误,主要是因为画图中横坐标必须是字符串。解决方案如下
#coding=gbk
import pygal
import math
import json
from itertools import groupby



def get_data(filename,dates,months,weeks,weekdays,close):

with open(filename) as f:
btc_data=json.load(f)
for btc_dict in btc_data:
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
close.append(int(float(btc_dict['close'])))

def draw_line(x_data,y_data,title,y_legend):
xy_map=[]

for x,y in groupby(sorted(zip(x_data,y_data)),key=lambda _: _[0]):
y_list=[v for _,v in y]
xy_map.append([x,sum(y_list)/len(y_list)])

x_unique,y_mean=[*zip(*xy_map)]

line_chart=pygal.Line()
line_chart.title=title

'''#注意,横坐标必须是字符串,使用数字会引发TypeError:TypeError: object of type
# 'int' has no len()的异常'''
new_x_unique=[]
for x in x_unique:
new_x_unique.append(str(x))
print(new_x_unique)
line_chart.x_labels=new_x_unique

line_chart.add(y_legend,y_mean)
line_chart.render_to_file(title+'.svg')
return line_chart


dates,months,weeks,weekdays,close=[],[],[],[],[]
get_data('btc_close_2017.json',dates,months,weeks,weekdays,close)

idx_month=dates.index('2017-12-01')
line_chart_month=draw_line(months[:idx_month],close[:idx_month],'收盘价月日均价','月日均价')
line_chart_month
原来有这么多小伙伴用这个书,能找到一模一样的问题,非常有帮助,非常感谢!
Real_csdn_User 2019-10-16
  • 打赏
  • 举报
回复
原本以为这样宽泛的错误在网上搜不到答案,结果一搜就搜到了,谢谢各位大神
隆信 2019-09-17
  • 打赏
  • 举报
回复
非常感谢!!!我把所有函数都一个一个排查,都没发现问题。原来是类型的问题。
qq_36568227 2019-09-15
  • 打赏
  • 举报
回复
感谢楼主以及各位,纠缠了半个下午,终于解决了
  • 打赏
  • 举报
回复
感谢,这个问题找了两天了,终于解决了
wuxiajuan126 2019-08-06
  • 打赏
  • 举报
回复

这是我的运行结果图
wuxiajuan126 2019-08-06
  • 打赏
  • 举报
回复
我也是初学者,下面是我的解决代码,定义了两个函数,一个取数据,一个画图,楼主出现的错误,主要是因为画图中横坐标必须是字符串。解决方案如下
#coding=gbk
import pygal
import math
import json
from itertools import groupby



def get_data(filename,dates,months,weeks,weekdays,close):

with open(filename) as f:
btc_data=json.load(f)
for btc_dict in btc_data:
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
close.append(int(float(btc_dict['close'])))

def draw_line(x_data,y_data,title,y_legend):
xy_map=[]

for x,y in groupby(sorted(zip(x_data,y_data)),key=lambda _: _[0]):
y_list=[v for _,v in y]
xy_map.append([x,sum(y_list)/len(y_list)])

x_unique,y_mean=[*zip(*xy_map)]

line_chart=pygal.Line()
line_chart.title=title

'''#注意,横坐标必须是字符串,使用数字会引发TypeError:TypeError: object of type
# 'int' has no len()的异常'''
new_x_unique=[]
for x in x_unique:
new_x_unique.append(str(x))
print(new_x_unique)
line_chart.x_labels=new_x_unique

line_chart.add(y_legend,y_mean)
line_chart.render_to_file(title+'.svg')
return line_chart


dates,months,weeks,weekdays,close=[],[],[],[],[]
get_data('btc_close_2017.json',dates,months,weeks,weekdays,close)

idx_month=dates.index('2017-12-01')
line_chart_month=draw_line(months[:idx_month],close[:idx_month],'收盘价月日均价','月日均价')
line_chart_month
Johnny_chenhhu 2019-03-13
  • 打赏
  • 举报
回复
是因为你在前面把month和close转化为int,提示int has no len,如果前面不转化就没有问题了
kaer_chen 2018-09-12
  • 打赏
  • 举报
回复
在这行代码中: line_chart.x_labels = x_unique
你的 x_unique 是整形元组
把整形元组转化为String型列表
再赋值给 line_chart.x_labels 就没问题了~

3,424

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧