Что означает: TypeError: не может объединить объекты 'str' и 'list'? - PullRequest
8 голосов
/ 18 июня 2009

Что означает эта ошибка?

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 ]

11 голосов
/ 18 июня 2009

Я не уверен, что вы знаете, что 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))

Все, что заключено в квадратные скобки в питоне, это всегда a 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",)
4 голосов
/ 18 июня 2009

строковые объекты могут быть объединены только с другими строками. Python - строго типизированный язык. Это не будет принуждать вас к типам.

вы можете сделать:

'a' + '1'

но не:

'a' + 1

в вашем случае вы пытаетесь объединить строку и список. это не сработает. Вы можете добавить элемент в список, если это желаемый результат:

my_list.append('a')
2 голосов
/ 19 июня 2009

В коде ОП есть ДРУГАЯ проблема:

z = ('0.') затем позже for k in z:

Скобки в первом операторе будут игнорироваться, что приведет к привязке второго оператора k сначала к '0', а затем '.' ... выглядит так, как будто z = ('0.', ) было предназначено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...