Python:我在函数下的最后3个引号(""”)处遇到“缩进块”错误,怎么回事?
这真是太奇怪了,对吧?出问题的代码是:
def main():
"""
main function
"""
# Argument handling
args = sys.argv[1:]
if not args:
print "usage is: ...
第三个引号的地方我总是遇到缩进错误:
>>>Import someScript
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "someScript.py", line 24
"""
^
如果我删掉注释(当然我不想这样做),那么下一个定义的函数在它的注释位置也会出现同样的错误。如果我把所有函数的注释都删掉,错误就消失了。
我搞不懂!为什么那里会期待有缩进?我用Komodo Edit部分是因为它不允许你混用空格和制表符,但为了保险起见我还是搜索了一下,结果发现根本没有制表符。即使有,混用也没道理啊。
这是怎么回事,大神们?
2 个回答
2
正如所说,文档字符串没有缩进。如果能在字符串的第一行就报错,那会更好,但目前的分析器并不是这样工作的。它一次处理一个完整的标记——记住三重引号的字符串可以跨多行——然后如果缩进不对就会报错。这个符号就是整个三重引号的字符串,而它恰好在不同的行结束。对比一下:
>>> def f():
... """one line"""
File "<stdin>", line 2
"""one line"""
^
IndentationError: expected an indented block
>>> def f():
... foo()
File "<stdin>", line 2
foo()
^
IndentationError: expected an indented block
>>> def f():
... return 42
File "<stdin>", line 2
return 42
^
IndentationError: expected an indented block
注意在第二个例子中,它指向了“foo”的结尾,这是那个缩进错误语句中的第一个符号:这和指向你的文档字符串的结尾是一样的。
18
你需要把函数的文档字符串和函数的代码块一起缩进。
每个冒号 (:
) 后面必须紧跟一个缩进的代码块。