IndentationError:web.py意外缩进

时间:2015-06-29 10:44:45

标签: python 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 个答案:

答案 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时,这些警告会出错。强烈推荐这些选项!

     

对于新项目,强烈建议仅使用空格。大多数编辑都具有使这很容易做到的功能。