代码之家  ›  专栏  ›  技术社区  ›  John

什么:typeerror:不能连接“str”和“list”对象?

  •  8
  • John  · 技术社区  · 17 年前

    这个错误是什么意思?

    类型错误:无法连接“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 回复  |  直到 14 年前
        1
  •  11
  •   Kenan Banks    17 年前

    我不确定你是否知道 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中,方括号之间的任何内容都是 总是 列表 . 括号之间的表达式的计算结果是正常的,除非表达式中有一个逗号,在这种情况下,括号充当 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",)
    
        2
  •  4
  •   Corey Goldberg    17 年前

    字符串对象只能与其他字符串连接。python是一种强类型语言。它不会为您强制类型。

    你可以做到:

    'a' + '1'
    

    但不是:

    'a' + 1
    

    在您的例子中,您试图连接一个字符串和一个列表。这行不通。但是,您可以将该项附加到列表中,如果这是您想要的结果:

    my_list.append('a')
    
        3
  •  2
  •   John Machin Santi    17 年前

    操作代码中还有一个问题:

    z = ('0.') 后来 for k in z:

    第一条语句中的括号将被忽略,导致第二条语句绑定 k 第一到 '0' 然后 '.' …看起来像 z = ('0.', ) 是故意的。