【问题标题】:Python list and type errorPython列表和类型错误
【发布时间】:2011-08-17 18:45:17
【问题描述】:

我已经用 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

这怎么可能?!?

提前感谢您的帮助。

【问题讨论】:

    标签: python list exception types


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      str.join() 只能连接一个字符串序列。显然,您的列表包含一个本身又是列表的项目。

      此外,如果您确实需要检查对象的类型,更好的方法是

      if isinstance(data, list):
          ...
      

      【讨论】:

      • 是的...我很笨...我的清单包含一些清单...很抱歉打扰大家。但无论如何感谢有关 isinstance 的提示
      【解决方案3】:

      data 的第一个元素是list。它必须是一个字符串,str.join() 才能如图所示工作。事实上,所有元素都必须。

      【讨论】:

        【解决方案4】:

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

        由于data 的内容而不是其类型而出现错误。它必须是一个字符串列表,str.join 方法才能处理它。

        【讨论】:

          【解决方案5】:

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

          您也不必这样做 type(data).__name__=='list' - 只需 type(data) is list

          更好 - 只需与 isinstance 联系,因为在大多数情况下您并不真正关心特定类型。

          【讨论】:

          • s/Even better - .*/Even better - just don't check types at all./ ;)
          【解决方案6】:

          join 期望 字符串 的可迭代。在您的情况下似乎发生的事情是您列表的第一个元素是另一个列表。这就是导致错误的原因。

          顺便说一句,if type(data).__name__=='list': ... 与代码一样非 Pythonic。

          【讨论】:

            猜你喜欢
            • 2019-09-30
            • 2012-11-19
            • 2017-08-20
            • 1970-01-01
            • 2014-05-23
            • 2021-06-05
            • 1970-01-01
            • 2018-05-01
            • 2017-01-01
            相关资源
            最近更新 更多