为什么在这里引发 IndentationError 而不是 SyntaxError?
Why is an IndentationError being raised here rather than a SyntaxError?
为什么在下面的程序中引发的是 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
。 post 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.
这是一个错误吗?如果是,是什么原因造成的?
IndentationError
是 SyntaxError
的子类,因此从技术上讲,这 是 引发的语法错误。
这里有 两个 错误。缩进都是错误的 和 你缺少括号。这是一个小错误,当检测到 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'
SyntaxError
代码路径检查 exec()
和 print()
边缘情况实际上应该只针对实际的 SyntaxError
实例触发,而不是子类,因为这只是令人困惑。
我已经提交 issue 31161 来跟踪这个。
为什么在下面的程序中引发的是 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
。 post 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.
这是一个错误吗?如果是,是什么原因造成的?
IndentationError
是 SyntaxError
的子类,因此从技术上讲,这 是 引发的语法错误。
这里有 两个 错误。缩进都是错误的 和 你缺少括号。这是一个小错误,当检测到 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'
SyntaxError
代码路径检查 exec()
和 print()
边缘情况实际上应该只针对实际的 SyntaxError
实例触发,而不是子类,因为这只是令人困惑。
我已经提交 issue 31161 来跟踪这个。