Я код этого кода в 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
Как это возможно?!?
Заранее спасибо за любую помощь.
Появляется список списков. Попробуйте:
",".join(str(x) for x in data)
str.join()
может присоединяться только к последовательности строк. Очевидно, что ваш список содержит элемент, который сам является списком снова.
Кроме того, если вам действительно нужно проверить тип объекта, лучший способ сделать это -
if isinstance(data, list):
...
Не проверяйте явно типы. Если вам нужно, используйте isinstance.
Ошибка появляется из-за содержимого data
, а не его типа. Это должен быть список строк для метода str.join
для работы над ним.
join
ожидает итерабельность строк. В вашем случае, похоже, что первый элемент вашего списка - это другой список. Это вызывает ошибку.
В стороне, if type(data).__name__=='list': ...
является как не-Pythonic по мере получения кода.
Первым элементом data
является list
. Он должен быть строкой, чтобы str.join()
работал, как показано. Фактически, все элементы должны.
Первый элемент вашего списка также является списком, а не строкой.
Также вам не нужно делать type(data).__name__=='list'
- просто type(data) is list
Еще лучше - просто установите флажок isinstance
, так как в большинстве случаев вы действительно не заботитесь о конкретном типе.
s/Even better - .*/Even better - just don't check types at all./
;)