【问题标题】:Making a string out of a string and an integer in Python [duplicate]在Python中用字符串和整数制作字符串[重复]
【发布时间】:2011-02-18 20:59:44
【问题描述】:

我在尝试获取一个整数并在其前面加上“b”并将其转换为字符串时收到此错误:

  File "program.py", line 19, in getname
    name = "b" + num
TypeError: Can't convert 'int' object to str implicitly

这和这个函数有关:

num = random.randint(1,25)
name = "b" + num

【问题讨论】:

  • This SO answer 解释了为什么 Python 不像 Javascript 那样将 + 的 RHS 转换为 str。这让我有点惊讶,但这个答案很好地解释了这一点。

标签: python python-3.x


【解决方案1】:

Python 不会像 JavaScript 或 PHP 那样自动转换类型。

您必须将其转换为字符串,或使用格式化方法。

name="b"+str(num)

或 printf 样式格式(这在 python3 中已被弃用)

name="b%s" % (num,)

或新的 .format 字符串方法

name="b{0}".format(num)

【讨论】:

  • Python 3 中不推荐使用 %。可能需要删除那个。
  • 我现在似乎无法编辑它,所以在此注意 % 已弃用。另外值得一提的是 .format 在 Python 2.6 之前不可用。
【解决方案2】:

Python 3.6 有f-strings 可以直接放变量名而不需要使用format:

>>> num=12
>>> f"b{num}"
'b12'

【讨论】:

    【解决方案3】:
    name = 'b' + str(num)
    

    name = 'b%s' % num
    

    正如 S.Lott 所指出的,混合运算符 '%' 在 Python 3 及更高版本中已弃用。我从INTERCAL 那里偷了“混合”这个名字,但这就是我谈论它的方式,并希望至少在之前看到一次它的印刷品——就像渡渡鸟一样——它从地球上消失了。

    【讨论】:

    • Python 3 中不推荐使用 %。可能需要删除那个。
    • @S.Lott 我必须在一些使用 python
    • @S.Lott % 在 Python3 中不被弃用。 PEP 3101 明确提到 新系统不会与现有字符串格式化技术的任何方法名称发生冲突,因此两个系统可以共存,直到需要弃用旧系统。
    【解决方案4】:

    已经给出了正确的答案,但我想插话并说您应该始终在每次打算将 var 用作字符串时使用 str(var),无论您是否知道是否为字符串。

    安全总比后悔好。

    【讨论】:

    • 但是,最坏的情况是什么?类型错误?
    【解决方案5】:
    name = "b{0:d}".format( num )
    

    【讨论】:

      【解决方案6】:

      是的,python 没有隐式 int 到字符串的转换。

      改用str(num)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-17
        • 2011-02-20
        • 2014-02-27
        • 1970-01-01
        • 2012-10-16
        • 2018-12-30
        • 2011-01-16
        相关资源
        最近更新 更多