Python:我在函数下的注释的最后 3 个引号 (""") 上出现“缩进块”错误。怎么了?
Posted
技术标签:
【中文标题】Python:我在函数下的注释的最后 3 个引号 (""") 上出现“缩进块”错误。怎么了?【英文标题】:Python: I'm getting an 'indented block' error on the last 3 quotes (""") of my comments under functions. What's up? 【发布时间】:2011-06-12 22:29:54 【问题描述】:超级奇怪,不是吗?违规代码:
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
"""
^
如果我删除了 cmets(显然我不想这样做),那么下一个要定义的函数会在其 cmets 的同一位置出现相同的错误。如果我从函数中删除所有 cmets,错误就会消失。
我不明白!为什么要在那里缩进?我在 Komodo Edit 中写作部分是因为它不允许您混合空格和制表符,但只是为了确保我进行了搜索,而且果然没有 friggin 制表符。并不是说如果有的话,它无论如何都是有意义的。
什么给了,大师们?
【问题讨论】:
cmets 以#
开头,你写的是docstring
顺便说一下,看看 optparse、argparse 或类似的东西,以便相当容易使用和更好地处理参数。
【参考方案1】:
您需要缩进文档字符串以及函数的块。
每个冒号 (:
) 必须紧跟一个缩进块。
【讨论】:
【参考方案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”的结尾,即错误缩进语句中的第一个符号:这与指向文档字符串的结尾相同。
【讨论】:
以上是关于Python:我在函数下的注释的最后 3 个引号 (""") 上出现“缩进块”错误。怎么了?的主要内容,如果未能解决你的问题,请参考以下文章