Python:在函数下,我的注释的最后3个引号(“”)出现了“缩进块”错误。怎么了?

2024-05-04 18:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

太奇怪了,不是吗?违规代码:

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中写作,部分原因是它不允许混合空格和制表符,但只是为了确保我做了一个搜索,并且,果然,没有可怕的制表符。如果有的话,那就没什么意义了。

给了什么,大师?


Tags: 函数代码maindef错误syslineargs
2条回答

如前所述,docstring没有缩进。最好是在字符串的第一行出现错误,但这不是lexer当前的工作方式。取而代之的是,它一次需要一个完整的标记(记住,三重引用的字符串意味着行跨越),然后如果它被错误地引用,就会发出一个错误。这个符号是整个三引号字符串,它恰好以另一行结尾。比较:

>>> 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”的结尾,即错误语句中的第一个符号:这与指向docstring的结尾相同。

您需要将docstring与函数的块缩进。

每个冒号(:)后面必须紧跟缩进的块。

相关问题 更多 >