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 个引号 (""") 上出现“缩进块”错误。怎么了?的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记(注释用户输入格式化输出)

Python 注释(Python Comments)用法详解

Python3 注释:单引号双引号注释介绍

python_基础

python 三引号回车不能自动生成函数注释的问题

Python学习之路-Linux下的HelloWord