示例代码
list = [i.get('content').encode('utf-8') for i in self.soup.find_all('meta',attrs={"name": "description"})]
问题是.encode('utf-8')
会引发错误:
AttributeError: 'NoneType' object has no attribute 'encode'
如果列表中的一个元素是None
。
我想知道是否有一个' pythonic'将它保持在一行并忽略无元素的方法。例如,您可以在列表中放置if not None
子句吗?感谢。
答案 0 :(得分:5)
我会将其分解为初始提取的生成器表达式以限制查找,因此get
仅为性能调用一次。
items_i = (i.get('content') for i in self.soup.find_all('meta',attrs={"name": "description"}))
items = [i.encode('utf-8') for i in items_i if i]
答案 1 :(得分:2)
你可以给.get
一个默认参数来代替None
[i.get('content','').encode('utf-8') for i in self.soup.find_all('meta',attrs={"name": "description"})]
或者你可以将其过滤掉
[i.get('content').encode('utf-8') for i in self.soup.find_all('meta',attrs={"name": "description"}) if i.get('content') is not None]
你应该注意到它不是i
,而是它的内容'