捕获语法错误
我正在写一个脚本,里面需要打印一个10秒的倒计时,而且不想换行,同时希望这个脚本在Python2和Python3中都能运行。
这是我尝试过的代码:
for sec in range(10, 0, -1):
try:
print(" %d \r" % sec, end="")
except SyntaxError:
subprocess.call("printf \" %d \\r\"" % sec, shell=True)
time.sleep(1)
但是我遇到了这个错误:
print(" %d \r" % sec, end="")
^
SyntaxError: invalid syntax
我觉得SyntaxError
应该是可以被捕捉到的。
我尝试去查找相关的信息,也看了关于SyntaxError
的文档,但找不到任何能解释为什么会出现这个错误的内容。
2 个回答
0
这应该能帮到你。
from __future__ import print_function
import time;
for sec in range(2):
print(sec, end='')
time.sleep(1)
2
根据文档的说明:
这种情况可能发生在导入语句、执行语句、调用内置函数eval()或input()时,或者在读取初始脚本或标准输入时(包括交互式输入)。
当你的程序被读取时,整个文件的语法会被解析,这个过程是在你的代码执行之前进行的。如果语法有问题,Python根本无法开始运行代码。因此,你无法捕捉到在模块内部发生的语法错误。
针对这种特定情况,有一个替代方法,即 from __future__ import print_function
。