在自由格式语言中,有时我使用缩进来表示我的语句中的一些隐式结构.在下面的例子中,我只是做一个序列,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)
我也记得有时想要这样的结构.这是我想到的(在C代码中允许这种错误缩进):
glBegin(GL_TRIANGLES);
drawVertices();
glEnd();
Run Code Online (Sandbox Code Playgroud)
请注意,我们有一个begin和一个end,从这里我将假设在你的情况下也会发生同样的情况:你想要表示某事的开始和结束.另一种情况是打开和关闭文件,甚至是问题中的示例.Python有一个特定的功能:上下文管理器.Python的文档甚至有一个例子:
(这不建议作为生成HTML的真实方式!):
Run Code Online (Sandbox Code Playgroud)from contextlib import contextmanager @contextmanager def tag(name): print("<%s>" % name) yield print("</%s>" % name) >>> with tag("h1"): ... print("foo") ... <h1> foo </h1>
我必须提到,上下文管理器不仅仅是一种重构代码的方法,它们实际上可以对从封闭代码引发的异常起作用,并且无论异常如何都执行一些代码(例如,确保文件被关闭).使用这个的简单示例@contextmanager不会发生,因为它的默认行为是简单地重新引发异常,因此不会发生意外.
除此之外,与你合作的人不会对错误的缩进感到高兴.如果你坚持,肯定if True是一种选择.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |