Python3 while循环break跳出后print报SyntaxError语法错误
报错根因
这个语法错误和代码逻辑、缩进值错误无关,是*Python交互式解释器(REPL,启动后显示>>>提示符的命令行交互环境)*的输入规则导致的:
- 输入
while/if/def这类带缩进块的复合语句时,REPL会显示...提示符,代表后续输入默认归属当前代码块;必须输入一次无任何内容的空回车,REPL才会判定当前块输入结束,回到接收顶级语句的>>>状态。 - 从贴出的运行记录看,
print('Done!')前仍是...提示符,说明写完循环内的print(line)后没有输入空行结束while块,直接输入了和循环同级的print语句。此时REPL仍判定你处于while的缩进块内部,突然出现的无缩进语句不符合Python缩进语法规则,直接触发SyntaxError。 - 之前删除最后一行print就能正常运行,是因为写完
print(line)后直接敲空行,REPL识别到块结束就会正常执行循环,自然不会报错。
修复方法
根据运行场景选择对应写法即可:
交互式REPL环境运行
写完循环内最后一行print(line)后,先敲一次空回车,等提示符从...切回>>>,再输入print('Done!')。正确交互流程示例:
>>> while True: ... line = input('> ') ... if line == 'done': ... break ... print(line) ... > test input test input > done >>> print('Done!') Done!
示例中print(line)下方单独的...行,就是需要敲空回车的位置,敲完后REPL会立刻开始执行while循环,等循环通过break退出后,再输入print语句即可正常运行。
.py脚本文件运行
如果是把代码写在.py后缀的脚本文件中执行,不需要额外加空行(加空行也不影响运行),只要保证缩进层级正确即可,正确脚本代码:
while True: line = input('> ') if line == 'done': break print(line) print('Done!')
运行该脚本即可实现预期逻辑:循环接收用户输入,输入done时跳出循环,打印Done!后退出。
内容的提问来源于stack exchange,提问作者the real AB
相关产品推荐
相关产品推荐

