Chr*_*ean 6 python indentation syntax-error python-3.x
为什么在以下程序中IndentationError被提升而不是SyntaxError?
>>> if True:
... print "just right!"
File "<stdin>", line 2
print "just right!"
^
IndentationError: Missing parentheses in call to 'print'
Run Code Online (Sandbox Code Playgroud)
为了确保IDLE不只是表现得很有趣,我还通过从普通源文件运行它来测试此代码.仍然会引发相同的异常类型.我用来测试它的Python版本是Python 3.5.2和Python 3.6.1.
我的理解是,在使用时缺少括号print被认为是a SyntaxError,而不是a IndentationError.帖子中的首要答案在Python中,"SyntaxError:调用'print'时缺少括号"是什么意思?似乎也支持这个:
"SyntaxError:调用'print'时缺少括号"是Python 3.4.2中添加的新错误消息,主要是为了帮助那些在运行Python 3时尝试遵循Python 2教程的用户.
这是一个错误吗?如果是这样,是什么导致了它?
IndentationError是SyntaxError技术上的子类,这是一个语法错误.
你有两个错误.缩进都是错误的,你缺少括号.这是一个bug,有一些代码SyntaxError在print检测到特殊情况时改变了消息,并且该代码仍然适用于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'
Run Code Online (Sandbox Code Playgroud)
SyntaxError检查exec()和print()边缘情况的代码路径应该只针对实际SyntaxError实例而不是子类,因为这只是令人困惑.
我已经提交了问题31161来跟踪这个问题.