【问题标题】:Multiplying a string with a number results in "TypeError: can't multiply sequence by non-int of type 'str'"将字符串与数字相乘会导致“TypeError: can't multiply sequence by non-int of type 'str'”
【发布时间】:2011-04-02 00:11:27
【问题描述】:

我需要一个由重复的特定字符组成的字符串。在 Python 控制台中,如果我输入:

n = '0'*8

然后n 被分配一个由 8 个零组成的字符串,这是我所期望的。

但是,如果我在 Python 程序(.py 文件)中有相同的内容,则程序会中止并显示错误消息
can't multiply sequence by non-int of type 'str'

有什么办法解决这个问题?

【问题讨论】:

  • 嗯,错误消息意味着您将两个乘法参数都解释为字符串。 8 不会仅仅通过将其放入文件中而成为字符串 - 必须还有其他事情正在发生......注意显示文件吗?
  • 当我把它写成 n = '0'*'8' 时出现上述错误消息,请检查你的表达
  • 编译器和解释器的工作方式意味着一些错误消息会出现在奇怪的位置,比如行后或行尾的两行。最好在您的程序中有一些上下文,因为问题可能是范围界定或类似问题。 tl;dr 为我们提供更多代码行

标签: python


【解决方案1】:

这行代码在此处执行的 .py 中运行良好,使用 python 2.6.5,您必须使用不同的 python 版本执行脚本。

【讨论】:

  • 这与 python 版本无关——正如 delnan 所说,这是他的程序中的一个错误。
  • 实际上首先问题信息有错误,根据他使用的问题 '0'*8 这是有效的,假设信息是正确的,可能的答案是他是使用“无效”的 python 解释器。
【解决方案2】:

您收到该错误是因为 - 在您的程序中 - 8 实际上也是一个字符串。

>>> '0'*8
'00000000'
>>> '0'*'8' # note the ' around 8
(I spare you the traceback)
TypeError: can't multiply sequence by non-int of type 'str'

【讨论】:

    【解决方案3】:

    我敢打赌你正在使用raw_input() 来读取与字符串相乘的值。您应该改用input() 将值读取为整数,而不是字符串。

    【讨论】:

    • 没有意识到这一点——谢谢!。对于其他菜鸟,这是给python2 (see this)。
    【解决方案4】:

    您收到错误消息的原因是您尝试对非整数值使用乘法运算符。

    完成这项工作的最简单的事情是:

    >>> n = ''.join(['0' for s in xrange(8)])
    >>> n
    '00000000'
    >>>
    

    或者为此执行功能:

    >>> def multiply_anything(sth, size):
    ...     return ''.join(["%s" % sth for s in xrange(size)])
    ...
    >>> multiply_anything(0,8)
    '00000000'
    >>>
    

    【讨论】:

      【解决方案5】:

      如果您希望结果是字符串列表而不是单个字符串,您可以随时使用:

      list(('0',) * 8)
      

      你可以得到:

      ['0', '0', '0', '0', '0', '0', '0', '0']
      

      【讨论】:

        猜你喜欢
        • 2018-01-27
        • 1970-01-01
        • 2013-08-25
        • 2016-01-27
        • 2021-01-06
        • 1970-01-01
        • 2014-06-15
        • 1970-01-01
        相关资源
        最近更新 更多