为了账号安全,请及时绑定邮箱和手机立即绑定

为什么列表中都有None,第一种不会报错,第二种会报错?

1. print filter(lambda s: s and len(s.strip()) > 0 , ['test', None, '', 'str', '  ', 'END'])


2.print filter(lambda s: s if len(s.strip()) > 0 else s, ['test', None, '', 'str', '  ', 'END'])

正在回答

2 回答

额,filter这个函数的意义就在于把前面这个方法为true 的选出来,所以前面的函数的返回值只能为True或者False,return s的话肯定会报错的

0 回复 有任何疑惑可以回复我~

因为none没有strip方法,报错如下:AttributeError: 'NoneType' object has no attribute 'strip'

0 回复 有任何疑惑可以回复我~
#1

天线 提问者

可能我问题没写清楚,第一种也有用到strip方法,为什么第一种没报这种错?
2017-02-10 回复 有任何疑惑可以回复我~
#2

放学路上的小学生 回复 天线 提问者

因为 and 是短路设计,当前者为True时,才会去判断后者,因此这里当s 不为None时,才去调用s.strip();当前者s为None时,直接返回,不再执行后面的语句,不执行自然不会报NoneType类型的错误了。
2017-05-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么列表中都有None,第一种不会报错,第二种会报错?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号