捕获SyntaxError

时间:2014-08-29 05:21:12

标签: python error-handling

我正在编写一个脚本,其中包括在没有换行符的情况下打印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应该被抓住。

我已经尝试过研究这个主题,并阅读documentation on SyntaxError,但找不到任何暗示这种情况的原因。

2 个答案:

答案 0 :(得分:2)

正如文件所说:

  

这可能发生在import语句,exec语句,内置函数eval()或input()的调用中,或者在读取初始脚本或标准输入时(也是交互式)。

在执行任何代码之前,在读取程序时会解析整个文件的语法。如果语法无效,Python甚至无法开始运行代码。因此,您无法捕获模块内发生的SyntaxError。

对于这种特殊情况,有一种替代方法,即from __future__ import print_function

答案 1 :(得分:0)

这应该对你有帮助。

from __future__ import print_function

import time;

for sec in range(2):
    print(sec, end='')
    time.sleep(1)