IndentationError: неожиданный отступ для web.py
У меня есть этот код в файле app.py
import web
urls = (
'/hello', 'Index'
)
app = web.application(urls, globals())
render = web.template.render('templates/')
class Index(object):
def GET(self):
return render.hello_form()
def POST(self):
form = web.input(name="Nobody", greet="Hello")
greeting = "%s" % (form.menu)
if greeting == "ct":
return render.ct(greeting=greeting)
elif greeting == "vjc":
return render.vjc(greeting=greeting)
elif greeting == "sa":
return render.sa(greeting=greeting)
elif greeting == "wc":
return render.wc(greeting=greeting)
elif greeting == "pt":
return render.pt(greeting=greeting)
else:
return render.s(greeting=greeting)
if __name__ == "__main__":
app.run()
и когда я запускаю сервер в cmd, я получаю следующую неожиданную ошибку отступа
$ python bin/app.py
File "bin/app.py", line 18
if greeting == "ct":
^
IndentationError: unexpected indent
Может кто-нибудь сказать мне причину этой ошибки. Я думаю, что проверял отступ несколько раз, и я не вижу никаких проблем с кодом.
Заранее благодарю за помощь!
1 ответ
Вы смешиваете вкладки и пробелы для отступа. if
строка использует вкладки, но в предыдущей строке только пробелы:
>>> lines = '''\
... greeting = "%s" % (form.menu)
... if greeting == "ct":
... '''
>>> lines
' greeting = "%s" % (form.menu)\n\t\tif greeting == "ct":\n'
>>> # ^^^ is all spaces, while here ^^^^ you use two tabs.
...
Python расширяет вкладки до каждого восьмого столбца, но ваш редактор, вероятно, настроен на использование только 4 пробелов для вкладки, что еще больше увеличивает путаницу. Ваш greeting
строка имеет отступ до 8 пробелов, а две вкладки на следующей строке расширены до 16 пробелов.
Никогда не используйте смешанные стили отступов; придерживайтесь либо только табуляции или только пробелов.
Вы можете настроить большинство редакторов на использование пробелов только для отступов; Вот что рекомендует руководство по стилю Python (PEP 8):
Вкладки или пробелы?
Никогда не смешивайте табуляции и пробелы.
Самый популярный способ сделать отступ в Python - использовать только пробелы. Второй по популярности способ - только с вкладками. Код с сочетанием символов табуляции и пробелов должен быть преобразован исключительно в пробелы. При вызове интерпретатора командной строки Python с параметром -t он выдает предупреждения о коде, который незаконно смешивает табуляции и пробелы. При использовании -tt эти предупреждения становятся ошибками. Эти варианты настоятельно рекомендуются!
Для новых проектов настоятельно рекомендуется использовать пробелы поверх вкладок. Большинство редакторов имеют функции, которые делают это легко сделать.