Ответ 1
Как указано в сообщении об ошибке, у вас есть ошибка с отступом. Вероятно, это связано с комбинацией вкладок и пробелов.
if len(trashed_files) == 0 :
print "No files trashed from current dir ('%s')" % os.path.realpath(os.curdir)
else :
index=raw_input("What file to restore [0..%d]: " % (len(trashed_files)-1))
if index == "*" :
for tfile in trashed_files :
try:
tfile.restore()
except IOError, e:
import sys
print >> sys.stderr, str(e)
sys.exit(1)
elif index == "" :
print "Exiting"
else :
index = int(index)
try:
trashed_files[index].restore()
except IOError, e:
import sys
print >> sys.stderr, str(e)
sys.exit(1)
Я получаю:
elif index == "" :
^
IndentationError: expected an indented block
Как указано в сообщении об ошибке, у вас есть ошибка с отступом. Вероятно, это связано с комбинацией вкладок и пробелов.
На самом деле есть несколько вещей, которые вы должны знать об отступах в Python:
В большинстве других языков отступ не является необходимым, но улучшает читаемость. В Python отступы заменяют ключевое слово begin/end
или { }
и поэтому необходимы.
Это проверяется перед выполнением кода, поэтому, даже если код с ошибкой отступа никогда не будет достигнут, он не будет работать.
1. "IndentationError: ожидается блок с отступом"
Это две основные причины, по которым у вас может возникнуть такая ошибка:
- У вас есть ":" без отступа блока.
Вот два примера:
Пример 1, без отступа блока:
Входные данные:
if 3 != 4:
print("usual")
else:
Выход:
File "<stdin>", line 4
^
IndentationError: expected an indented block
Выходные данные заявляют, что вам нужно иметь блок с отступом в строке 4 после оператора else:
Пример 2, блок с отступом:
Входные данные:
if 3 != 4:
print("usual")
Выход
File "<stdin>", line 2
print("usual")
^
IndentationError: expected an indented block
Выходные данные заявляют, что вам нужно иметь строку с отступом блока 2 после оператора if 3 != 4:
- Вы используете Python2.x и у вас есть сочетание табуляции и пробелов:
вход
def foo():
if 1:
print 1
Обратите внимание, что до, если есть вкладка, а до печати есть 8 пробелов.
Выход:
File "<stdin>", line 3
print 1
^
IndentationError: expected an indented block
Довольно сложно понять, что здесь происходит, кажется, что есть блок отступа... Но, как я уже сказал, я использовал табуляцию и пробелы, и вы никогда не должны этого делать.
2. "IndentationError: неожиданный отступ"
Важно сделать отступ для блоков, но только для блоков, которые должны иметь отступ. Так что в основном эта ошибка говорит:
- У вас есть блок с отступом без ":" перед ним.
Пример:
Входные данные:
a = 3
a += 3
Выход:
File "<stdin>", line 2
a += 3
^
IndentationError: unexpected indent
Выходные данные утверждают, что он не ожидал отступ строки блока 2, тогда вы должны удалить его.
3. "TabError: непоследовательное использование табуляции и пробелов в отступе" (только python3.x)
Просто посмотрите на номер строки ошибки и исправьте ее, используя предыдущую информацию.
У меня была эта же проблема и я обнаружил (через этот ответ на аналогичный вопрос), что проблема заключалась в том, что я должным образом не отформатировал docstring. К сожалению, IDLE не дает полезной обратной связи здесь, но как только я исправил отступы docstring, проблема исчезла.
В частности --- плохой код, который генерирует ошибки отступов:
def my_function(args):
"Here is my docstring"
....
Хороший код, который позволяет избежать ошибок отступа:
def my_function(args):
"Here is my docstring"
....
Примечание. Я не говорю об этой проблеме , но она может быть, потому что в моем случае это было!
Вы можете проверить пробелы и вкладки. Вкладка по умолчанию - 4 пробела. Однако ваши совпадения "if" и "elif", поэтому я не совсем уверен, почему. Перейдите в "Параметры" в верхней строке и нажмите "Настроить IDLE". Проверьте ширину отступов справа в шрифтах/вкладках и убедитесь, что ваши отступы имеют много пробелов.
Это просто проблема с отступом, поскольку Python очень строг, когда дело доходит до него.
Если вы используете Sublime, вы можете выбрать все, нажмите на нижнюю правую сторону рядом с "Python" и убедитесь, что вы проверяете "Отступ, используя пробелы", и выберите ширину закладки, чтобы она была последовательной, затем Преобразование отступов в пробелы для преобразования всех вкладок в пробелы.
в Python подразумевается блок означает, что есть все, что должно быть написано в манере, в моем случае я написал это таким образом
def btnClick(numbers):
global operator
operator = operator + str(numbers)
text_input.set(operator)
Note.its выдает мне ошибку, пока я не напишу ее таким образом, чтобы "давать пробелы", то это давало мне блок, как я пытаюсь показать вам в коде функции ниже
def btnClick(numbers):
___________________________
|global operator
|operator = operator + str(numbers)
|text_input.set(operator)