首页 > 解决方案 > 用列表理解替换字符串时出现 TypeError

问题描述

我的代码很简单:

['found' if 'some_string' in word else word for word in wordlist]

但它返回

    TypeError                                 
Traceback (most recent call last)
    <ipython-input-108-990cad51d935> in <module>()
    ----> 1 [word  for word in wordlist if 'some_string' in word ]

    <ipython-input-108-990cad51d935> in <listcomp>(.0)
    ----> 1 [word  for word in wordlist if 'some_string' in word ]

    TypeError: argument of type 'NoneType' is not iterable

(我试过用几种方法重新排列它,但都无济于事。)

相比之下,这段代码完全符合预期:

for word in wordlist:
    if 'some_string' in word:
        print ('found')
    else:
        print(word)

我想要的只是用'found'替换包含'some_string'的任何字符串。

进一步的上下文:wordlist 是 Jupyter 笔记本中 Pandas 数据框列的值。

wordlist = list(df.sender.values)
type(wordlist)
 list

标签: pythonpython-3.xpandas

解决方案


您可以通过简单地使用“str()”来与从列表中恢复的值进行比较来解决这个问题。

下面是一个例子来证明这一点:

wordlist = ['some_string', 'sometext', 'some_string', 'randomtext', None]
['found' if 'some_string' in str(word) else word for word in wordlist]

输出是

['found', 'sometext', 'found', 'randomtext', None]

(要产生错误,在理解中用 word 替换 str(word)。)


推荐阅读