类型错误:无法连接'str'和'int'对象。

157

我有一个Python程序,可以将字符串与整数相加:

a = raw_input("Enter a: ")
b = raw_input("Enter b: ")
print "a + b as strings: " + a + b
a = int(a)
b = int(b)
c = a + b
str(c)
print "a + b as integers: " + c

我遇到了这个错误:

TypeError: cannot concatenate 'str' and 'int' objects

我如何将字符串添加到整数?

9个回答

187

修复最后一个print语句引起的问题有两种方法。

您可以像@jamylak所示正确地将 str(c) 调用的结果赋值给c,然后连接所有字符串,或者您可以仅仅替换最后一个print为:

print "a + b as integers: ", c  # note the comma here

在这种情况下

str(c)

可以不必要,可以删除。

示例运行结果:

Enter a: 3
Enter b: 7
a + b as strings:  37
a + b as integers:  10

使用:

a = raw_input("Enter a: ")
b = raw_input("Enter b: ")
print "a + b as strings: " + a + b  # + everywhere is ok since all are strings
a = int(a)
b = int(b)
c = a + b
print "a + b as integers: ", c

86

str(c) 返回一个 新的 字符串表示形式,不会对 c 本身进行改变。

c = str(c) 

这可能是你正在寻找的。


1
我认为程序中根本不需要 str(c) (尽管你所说的必须分配函数结果是正确的)。 - Levon
不是必需的我同意,但这就是为什么它不能按原样工作的原因。 - jamylak
你可以留下它,它不会引起任何问题(就像它实际上什么也没做一样 :))。 - Levon
1
如果您删除它,您必须更改以下行为 print "a + b as integers: ", c - Tim Pietzcker
@Levon,我为你的“替代”方法点赞。 - jamylak

23

如果你想将整数或浮点数连接到一个字符串中,你必须使用这个方法:

i = 123
a = "foobar"
s = a + str(i)

6
c = a + b 
str(c)

实际上,在这一行中,您并没有改变变量c的类型。如果您这样做
c_str=str(c)
print "a + b as integers: " + c_str

应该可以工作。


3
除了其他答案之外,你还可以使用format()
例如:print("a + b as integers: {}".format(c)) 注:该函数可以将变量插入到字符串中。
hours = 13
minutes = 32
print("Time elapsed - {} hours and {} minutes".format(hours, minutes))

执行该程序将输出 - 经过了13小时32分钟的时间

更多信息请查看文档.


2
您可以使用字符串函数将int转换为str
user = "mohan"

line = str(50)

print(user + "typed" + line + "lines")

2
这个问题已经被其他人回答过了,你的回答没有任何添加。 - Karsten Koop

1
最简单和最不容易混淆的解决方案:
a = raw_input("Enter a: ")
b = raw_input("Enter b: ")
print "a + b as strings: %s" % a  + b
a = int(a)
b = int(b)
c = a + b
print "a + b as integers: %d" % c

我在http://freecodeszone.blogspot.com/上发现了这个。


1
我也遇到了错误信息“TypeError: cannot concatenate 'str' and 'int' objects”。原来是在打印变量时忘记加上str()。以下是我的代码:

def main():
 rolling = True; import random
 while rolling:
  roll = input("ENTER = roll; Q = quit ")
  if roll.lower() != 'q':
   num = (random.randint(1,6))
   print("----------------------"); print("you rolled " + str(num))
  else:
   rolling = False
main()

我知道,这是一个愚蠢的错误,但对于像我这样刚接触Python的初学者来说,这种情况经常发生。


1

我已经采取了把变量用逗号分隔的方法来消除这个错误。

# Applying BODMAS 
arg3 = int((2 + 3) * 45 / - 2)
arg4 = "Value "
print arg4, "is", arg3

这是输出结果

值为-113

(程序以代码0退出)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接