TypeError: 不能连接'str'和'list'对象是什么意思?

8 投票
3 回答
38793 浏览
提问于 2025-04-15 12:20

这个错误是什么意思呢?

TypeError: 不能把 'str' 和 'list' 这两种东西连接在一起

下面是代码的一部分:

for j in ('90.','52.62263.','26.5651.','10.8123.'):
    if j == '90.':
        z = ('0.')
    elif j == '52.62263.':
        z = ('0.', '72.', '144.', '216.', '288.')

    for k in z:
        exepath = os.path.join(exe file location here)
        exepath = '"' + os.path.normpath(exepath) + '"'
        cmd = [exepath + '-j' + str(j) + '-n' + str(z)]

        process=Popen('echo ' + cmd, shell=True, stderr=STDOUT )
        print process

3 个回答

2

在提问者的代码中还有另一个问题:

z = ('0.') 然后后面有 for k in z:

在第一个语句中的括号会被忽略,这样在第二个语句中,k 会先绑定到 '0',然后再绑定到 '.' ... 看起来应该是 z = ('0.', ) 这个写法。

4

字符串对象只能和其他字符串连接在一起。Python是一种强类型语言,它不会自动帮你转换数据类型。

你可以这样做:

'a' + '1'

但是不能这样做:

'a' + 1

在你的情况下,你试图把一个字符串和一个列表连接在一起,这样是行不通的。不过,如果你想要的结果是把某个项目加到列表里,你可以这样做:

my_list.append('a')
11

我不确定你是否知道,cmd 是一个只有一个元素的 list,而不是一个字符串。

把那行代码改成下面这样就能生成一个字符串,之后的代码就能正常工作了:

# Just removing the square brackets
cmd = exepath + '-j' + str(j) + '-n' + str(z)

我猜你使用括号只是为了把操作分组。如果所有内容都在一行上,其实不需要这样。如果你想把它分成两行,应该用圆括号,而不是方括号:

# This returns a one-element list
cmd = [exepath + '-j' + str(j) + 
       '-n' + str(z)]

# This returns a string
cmd = (exepath + '-j' + str(j) + 
       '-n' + str(z))

在 Python 中,方括号里的内容总是一个 list。而圆括号里的表达式会正常计算,除非表达式中有逗号,这种情况下,圆括号就会变成 tuple 的构造器:

# This is a string
str = ("I'm a string")

# This is a tuple
tup = ("I'm a string","me too")

# This is also a (one-element) tuple
tup = ("I'm a string",)

撰写回答