python 用setdefault()或者get()中往字典内插入list类型的值,为什么出错

程序如下:rule_class={}sql="select*fromrules_wordwherestatus=1andaction='only'"rows=db_spa... 程序如下:

rule_class={}
sql="select * from rules_word where status=1 and action='only' "
rows=db_spam.query(sql) #这里返回一个列表形式,里面的元素是字典类型,'name','type'都是key
for row in rows :
exp=row['name']
classify=row['type']
rule_class[classify]=rule_class.setdefault(classify,[]).append(exp)
print rule_class

运行后出错如下:
rule_class[classify]=rule_class.setdefault(classify,[]).append(exp)
AttributeError: 'NoneType' object has no attribute 'append'
该怎么解决呢?
问题已经解决了,其实是赋值语句逻辑不对,应直接改为:
rule_class.setdefault(classify,[]).append(exp)
就可以了
展开
 我来答
neosicifore
2014-12-18 · TA获得超过2258个赞
知道小有建树答主
回答量:446
采纳率:66%
帮助的人:498万
展开全部
从这个错误信息我们能看出的是
rule_class.setdefault(classify,[]) 这个值是None,而不是list

而None是没有append这个属性或方法的,所以报错

那么你要调试,就看看rule_class.setdefault(classify,[])获得这个值的步骤中哪里出错了,

建议,像这种有错误风险的地方
最好加判断

if isinstance(rule_class.setdefault(classify,[]), list):#判断其是否为一个list
rule_class[classify]=rule_class.setdefault(classify,[]).append(exp)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式