2015-07-20 78 views
1

没有属性“取代”我有folllowing字典...“NoneType”对象在Python列表理解

mydict = {'columns': ['col1', 'col2', 'col3'], 
      'rows': [['col1', 'col2', 'col3'], 
        ['testing data 1', 'testing data 2lk\nIdrjy9dyj', 'testing data 3'], 
        ['testing data 2', 'testing data 3', 'testing data 4'], 
        ['testing data 3', 'testing data 4', 'testing data 5']]} 

,我使用了下面的列表理解来代替这个"<br>"回车"\n"。它工作正常,除非它传递一个空字符串,因为它正在读取一个json文件。然后它会抛出错误'NoneType' object has no attribute 'replace'。我只是不知道如何将if is not none声明放入列表理解中。任何帮助非常感激..

for items in mydict['rows']: 
     mydict['rows'][i] = [item.replace("\n","<br>") for item in items] 
     i += 1 

回答

2

你可以只使用一个布尔表达式在这里:

[item and item.replace("\n","<br>") for item in items] 

如果item被认为是真,这只是调用item.replace(); None和一个空字符串都被认为是错误的。

如果你想过滤掉任何None项目,你可以测试添加到您的列表理解:

[item.replace("\n","<br>") for item in items if item is not None] 

删除None值或

[item.replace("\n","<br>") for item in items if item] 

只保留非空值。

+0

这是光滑的!谢谢 – whoopididoo