Список Python и ошибка типа

1

Я код этого кода в Python:

if type(data).__name__=='list':
                print type(data).__name__
                print ",".join(data)

И это дает мне эту ошибку:

    print ",".join(data)
exceptions.TypeError: sequence item 0: expected string, list found

Как это возможно?!?

Заранее спасибо за любую помощь.

Теги:
list
exception
types

6 ответов

3

Появляется список списков. Попробуйте:

",".join(str(x) for x in data)
  • 0
    Вы, сэр, спасли мой день.
1

str.join() может присоединяться только к последовательности строк. Очевидно, что ваш список содержит элемент, который сам является списком снова.

Кроме того, если вам действительно нужно проверить тип объекта, лучший способ сделать это -

if isinstance(data, list):
    ...
  • 0
    да ... я такой тупой ... мой список содержит несколько списков, чтобы ... извините, что беспокою вас всех. но все равно спасибо за совет о isinstance
0

Не проверяйте явно типы. Если вам нужно, используйте isinstance.

Ошибка появляется из-за содержимого data, а не его типа. Это должен быть список строк для метода str.join для работы над ним.

0

join ожидает итерабельность строк. В вашем случае, похоже, что первый элемент вашего списка - это другой список. Это вызывает ошибку.

В стороне, if type(data).__name__=='list': ... является как не-Pythonic по мере получения кода.

0

Первым элементом data является list. Он должен быть строкой, чтобы str.join() работал, как показано. Фактически, все элементы должны.

0

Первый элемент вашего списка также является списком, а не строкой.

Также вам не нужно делать type(data).__name__=='list' - просто type(data) is list

Еще лучше - просто установите флажок isinstance, так как в большинстве случаев вы действительно не заботитесь о конкретном типе.

  • 1
    s/Even better - .*/Even better - just don't check types at all./ ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню