什么是 TypeError: cannot concatenate 'str' and 'list' objects 的意思?

8

这个错误是什么意思?

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

6
你能发布你的代码吗? - John McCollum
1
明白了 - 我的答案现在对您有效。 - Kenan Banks
1
else == '52.62263.':这是Python中的语法错误。 - SilentGhost
3个回答

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",)

1
@Tyler - 不确定你在说什么。我的代码中没有循环。 - Kenan Banks
1
他的代码似乎在不应该的情况下几乎随机地循环回到90。 - Tyler

4

字符串对象只能与其他字符串连接。Python是强类型语言,它不会为您强制转换类型。

您可以这样做:

'a' + '1'

但不包括:

'a' + 1

在您的情况下,您正在尝试连接一个字符串和一个列表。这是行不通的。但是,如果您想要的结果是将项目附加到列表中,则可以执行此操作:

my_list.append('a')

2

这段代码还有另一个问题:

z = ('0.'),然后稍后执行for k in z:

第一个语句中的括号将被忽略,导致第二个语句首先将k绑定到'0',然后再绑定到'.'...看起来应该是想要z=('0.',)


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