为何Python交互式shell中循环后执行print报语法错误,脚本运行却正常
报错原因
Python交互式REPL环境和.py脚本的代码块识别规则存在差异:
- 在
.py脚本中,解释器会根据全局缩进层级的变化自动判断代码块边界,当print语句的缩进回到和for关键字同级时,会被自动识别为循环外的独立代码,因此可以正常运行。 - 在交互式REPL中,解释器无法预判你是否还要继续编写缩进块内的代码,所有缩进形式的代码块(循环、分支、函数定义等)都需要输入一个空行来显式告知解释器块已结束。你报错的场景中,写完
total += i之后没有输入空行就直接写了同级的print(total),此时REPL仍然判定你处于for循环的缩进块编写阶段,无缩进的print语句不符合循环内的缩进规则,就会抛出语法错误。
交互式环境下的正确写法
>>> z = [ 2, 3, 4, 5, 6 ] >>> total = 0 >>> for i in z: ... total += i ... # 此处输入空行,触发REPL执行当前for循环代码块 >>> print(total) 20
内容的提问来源于stack exchange,提问作者Jason T.
相关产品推荐
相关产品推荐

