gpt4 book ai didi

python - 为什么在这里引发 IndentationError 而不是 SyntaxError?

转载 作者:太空狗 更新时间:2023-10-29 21:38:45 25 4
gpt4 key购买 nike

为什么在下面的程序中引发的是 IndentationError 而不是 SyntaxError

>>> if True:
... print "just right!"
File "<stdin>", line 2
print "just right!"
^
IndentationError: Missing parentheses in call to 'print'

为了确保 IDLE 不仅仅是表现得很有趣,我还通过从普通源文件运行这段代码来测试它。仍在引发相同的异常类型。我用来测试的 Python 版本是 Python 3.5.2 和 Python 3.6.1。

据我所知,使用 print 时缺少括号被视为 SyntaxError,而不是 IndentationError。帖子中的最佳答案What does “SyntaxError: Missing parentheses in call to 'print'” mean in Python?似乎也支持这一点:

“SyntaxError: Missing parentheses in call to 'print'” is a new error message that was added in Python 3.4.2 primarily to help users that are trying to follow a Python 2 tutorial while running Python 3.

这是一个错误吗?如果是,是什么原因造成的?

最佳答案

IndentationErrorSyntaxError 的子类,因此从技术上讲,这 是一个语法错误。

这里有两个错误。缩进错误并且您缺少括号。这是一个小错误,当检测到 print 特殊情况时,有代码会更改 SyntaxError 消息,并且该代码仍然适用于 SyntaxError< 的子类(在SyntaxError 异常构造函数中应用)。

您可以为 TabError 异常触发相同的错误:

>>> compile('if 1:\n    1\n\tprint "Look ma, tabs!"', '', 'single')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "", line 3
print "Look ma, tabs!"
^
TabError: Missing parentheses in call to 'print'

检查 exec()print() 边界情况的 SyntaxError 代码路径实际上应该只针对实际的 SyntaxError 触发 实例,而不是子类,因为这很容易混淆。

我已经提交了 issue 31161跟踪这个。

关于python - 为什么在这里引发 IndentationError 而不是 SyntaxError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com