我可以故意写"错误缩进"的Python代码吗?

hug*_*omg 2 python

在自由格式语言中,有时我使用缩进来表示我的语句中的一些隐式结构.在下面的例子中,我只是做一个序列,prints但缩进表示第一个和第四个打印语句将两个中间"包围".

print("<div>")
  print("hello")
  print("world")
print("</div>")
Run Code Online (Sandbox Code Playgroud)

有没有办法在不触发的情况下在Python中执行类似的操作IndentationError: unexpected indent?

到目前为止,我能想到的最好的方法是使用空白if语句来引入新的缩进级别.

print("<div>")
if True:
  print("hello")
  print("world")
print("</div>")
Run Code Online (Sandbox Code Playgroud)

Ole*_*pin 6

我也记得有时想要这样的结构.这是我想到的(在C代码中允许这种错误缩进):

glBegin(GL_TRIANGLES);
    drawVertices();
glEnd();
Run Code Online (Sandbox Code Playgroud)

请注意,我们有一个begin和一个end,从这里我将假设在你的情况下也会发生同样的情况:你想要表示某事的开始和结束.另一种情况是打开和关闭文件,甚至是问题中的示例.Python有一个特定的功能:上下文管理器.Python的文档甚至有一个例子:

(这不建议作为生成HTML的真实方式!):

from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

>>> with tag("h1"):
...    print("foo")
...
<h1>
foo
</h1>
Run Code Online (Sandbox Code Playgroud)

我必须提到,上下文管理器不仅仅是一种重构代码的方法,它们实际上可以对从封闭代码引发的异常起作用,并且无论异常如何都执行一些代码(例如,确保文件被关闭).使用这个的简单示例@contextmanager不会发生,因为它的默认行为是简单地重新引发异常,因此不会发生意外.


除此之外,与你合作的人不会对错误的缩进感到高兴.如果你坚持,肯定if True是一种选择.