Я попытался попробовать блок cat, чтобы проверить словарь в словаре, а список в словаре имеет юникод или нет.
def convert(input):
if isinstance(input, dict):
for key, value in input.iteritems():
temp = {convert(key):convert(value)}
return temp
elif isinstance(input, list):
for element in input:
temp1 = [convert(element)]
return temp1
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
#return input
print input
Я хочу получить результат от этой функции, если есть юникод, элемент в словаре или элемент закодирован с помощью utf8. Но у меня такая ошибка:
$python main.py
File "main.py", line 21
return temp1
^
IndentationError: unindent does not match any outer indentation level






Отступы похожи на фигурные скобки, если вы знакомы с ними всякий раз, когда вы объявляете блок, например циклы if elsefor, определение class или определение function, он ожидает найти уровень отступа, равный пробелу или табуляции, тот же уровень отступа обрабатывает его как один блок. Если вы хотите вложенный блок, вы сделать так:
def myfunction(arg): #one block
for x in range(0,arg): #indents at starting
if x==1:#another block
print('one')#more indents for nesting
так в вашем коде
def convert(input):
if isinstance(input, dict):
for key, value in input.iteritems():
temp = {convert(key):convert(value)}
return temp
elif isinstance(input, list):
for element in input:
temp1 = [convert(element)]
return temp1 #here it expects to be in same indent level temp1 = [convert(element)] is at
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
#return input
print input
это исправлено в ответе @Andronicus
Отступ определяет блочную структуру в Python. Когда вы убираете отступ, строка без отступа должна совпадать с предыдущим уровнем отступа. Ваш оператор
returnимеет неправильный отступ.