2011-05-03 48 views
1

我有这个代码的代码在Python:Python列表和类型错误

if type(data).__name__=='list': 
       print type(data).__name__ 
       print ",".join(data) 

而且它给我这个错误:

print ",".join(data) 
exceptions.TypeError: sequence item 0: expected string, list found 

这怎么可能?!?

在此先感谢anyhelp。

回答

0

data的第一个元素是list。它必须是一个字符串,以便str.join()按所示方式工作。实际上,所有元素都必须。

1

str.join()只能加入一串字符串。显然你的列表包含一个项目,它本身又是一个列表。

此外,如果你真的需要检查的对象,一个更好的方式来做到这一点的类型是

if isinstance(data, list): 
    ... 
+0

啊...我很愚蠢......我的列表包含一些名单...抱歉打扰你的所有。但是,无论如何感谢关于isinstance – kirikouille 2011-05-03 14:40:53

0

不明确检查的类型。如果您确实需要,请使用isinstance

由于data的内容而不是其类型,因此显示错误。它需要是str.join方法的字符串列表。

0

列表的第一个元素也是一个列表,而不是一个字符串。

你也不必做type(data).__name__=='list' - 只是type(data) is list

更妙的是 - 只是isinstance检查,因为你真的不关心在大多数情况下,一个特定的类型。

+1

的提示/更好 - 。* /更好 - 只是不检查类型。/';) – delnan 2011-05-03 14:36:46

0

join预计可迭代字符串。你的情况似乎发生的是你的列表的第一个元素是另一个列表。这是导致错误的原因。

顺便说一句,if type(data).__name__=='list': ...是代码获取的非pythonic。

3

您似乎有一个列表的列表。尝试:

",".join(str(x) for x in data) 
+0

你先生救了我的一天。 – 2012-10-16 14:34:40