我在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
任何人都可以告诉我这个错误的原因。我想我已多次检查缩进,我没有看到代码有任何问题。
提前感谢所有帮助!
答案 0 :(得分:2)
您正在混合标签和空格以进行缩进。 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将标签扩展到每个第8列,但您可能将编辑器设置为仅使用4个空格作为选项卡,这进一步增加了混淆。您的greeting
行缩进为8个空格,而下一行的两个标签扩展为 16 空格。
不要使用混合缩进样式;坚持只有标签或只有空格。
您可以将大多数编辑器配置为仅使用空格 进行缩进;这是Python styleguide (PEP 8)推荐的内容:
标签或空格?
切勿混合标签和空格。
缩进Python最流行的方法是仅使用空格。第二种最流行的方式是仅使用标签。使用制表符和空格混合缩进的代码应转换为仅使用空格。当使用-t选项调用Python命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用-tt时,这些警告会出错。强烈推荐这些选项!
对于新项目,强烈建议仅使用空格。大多数编辑都具有使这很容易做到的功能。