Python - TypeError: неподдерживаемые типы операндов для +: «NoneType» и «str»? Что я делаю не так?

Я пытаюсь создать определение Python для отображения списка и пытаюсь добавить функцию, в которой, если список больше 10, он будет отображаться горизонтально.

Вот мой код:

def print_vert_list(list):
index = 0
for i in list:
    if len(list) > 10:
        print (" ".join(list[index]) + " ".join(list[11:11+index])) + " ".join(list[21:21+index])
    else:
        print (" ".join(list[index]))
        index += 1

И вот журнал:

Traceback (most recent call last):
File "**********", line 30, in <module>
print_vert_list(file_var_list)
File "**********", line 22, in print_vert_list
print (" ".join(list[index]) + " ".join(list[11:11+index])) + " ".join(list[21:21+index])
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

person Community    schedule 29.12.2019    source источник
comment
Что вам дает print(list)? Все ли элементы в list строках можно объединить?   -  person Devesh Kumar Singh    schedule 29.12.2019
comment
Не помешают ли этому месячные?   -  person    schedule 29.12.2019


Ответы (5)


У вас должен быть элемент, содержащийся в списке, где он не является строкой. Сообщение об ошибке говорит вам, что программа ломается, потому что вы пытаетесь объединить тип None со строковым типом. Например:

a = "string1" + "string2" print(a) # will give you string1string2

Но если вы попробуете a = None + "string1" # You will get the same error message

Используя эту логику, вы можете добавить условную проверку, чтобы убедиться, что элемент списка не имеет типа None, после чего вы можете успешно объединить его.

person velociraptor11    schedule 29.12.2019

print() возвращает None. Вы не можете добавить строку к результату вызова print, так как вы не можете добавить None и строку

print(" ".join(list[index]) + " ".join(list[11:11+index])) + " ".join(list[21:21+index])
                                   end of the print call ^ ^ You cannot add a string here
person Iain Shelvington    schedule 29.12.2019

Оператор + определен только для строк (... и чисел, однако в другом контексте...)

В строке print (" ".join(list[index]) + " ".join(list[11:11+index])--->>>)<<<--- + " ".join(list[21:21+index]) неверная скобка. Функция печати возвращает NoneType, и из-за этой дополнительной круглой скобки интерпретатор считает, что на этом оператор печати заканчивается. Таким образом, эта дополнительная скобка вызывает такое же поведение, как описано в Python 3.3 TypeError: неподдерживаемые типы операндов для +: 'NoneType' и 'str', поэтому выдает ту же ошибку

person ralf htp    schedule 29.12.2019

Если я правильно понял вопрос, то это решение:

def print_vert_list(list_items):
    if len(list_items) > 10:
        for i in list_items:
            print(i, end=' ')
    else:
        for i in list_items:
            print(i)
person Marios Keri    schedule 29.12.2019

Ваши скобки неверны в этой строке. Вы хотели бы:

print (" ".join(list[index]) + " ".join(list[11:11+index]) + " ".join(list[21:21+index]))

вместо:

print (" ".join(list[index]) + " ".join(list[11:11+index])) + " ".join(list[21:21+index])

что дает вам ошибку, потому что вы пытаетесь добавить строку к возвращаемому значению print.

person DarklingArcher    schedule 29.12.2019