为什么我在这里得到一个TypeError?

时间:2012-08-31 05:22:27

标签: python-2.7

if emp in like_list[j]:
  

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

emplike_list都是包含字符串的列表。

2 个答案:

答案 0 :(得分:2)

由于emplike_list都是列表,因此您实际上是在列表中查找列表。

如果您尝试匹配列表emp中的任何元素,您可以像这样迭代列表:

for element in emp:
    if element in like_list:
        --do something--
    else:
        --do something else--

或者,如果like_list是列表列表,那么您的if语句就可以了。

答案 1 :(得分:0)

如果emplike_list都是字符串列表,则表达式emp in like_list[j]正在检查列表是否是单个字符串的成员。当我使用下面的代码测试它时,我得到了一个略有不同的TypeError

>>> emp = ["foo", "bar"]
>>> like_list = ["baz", "quux"]
>>> if emp in like_list[0]:
...     print "found"
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not list

这表示您无法在字符串中为成员资格测试非字符串。我认为解决这个问题非常简单,但是你想要做的事情并不完全清楚。

如果要检查字符串like_list[j]是否将emp中的某个字符串作为子字符串,请使用:

if any(s in like_list[j] for s in emp):

如果您希望查看like_list[j]是否等于emp中的某个字符串,则需要转换in表达式:

if like_list[j] in emp: