捕获语法错误

0 投票
2 回答
642 浏览
提问于 2025-04-18 18:56

我正在写一个脚本,里面需要打印一个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

撰写回答