python - 使用 try except 捕获未完成的字符串语法错误

python - catching unfinished string Syntax Error using try except

我是 python 的新手,学习 try 和 except 块的一个例子对我来说没有任何困难:

try:
    2 + "s"
except TypeError:
    print "There was a type error!"

输出预期的结果:

There was a type error!

但是,当尝试捕获这样的语法错误时:

try:
    print 'Hello
except SyntaxError:
    print "There was a syntax error!"
finally:
    print "Finally, this was printed"

我会讽刺地得到 EOL 语法错误。我在 jupyter notebook 环境中尝试了几次,只有当我移到 VIM 中的终端时,编译器将 except 和 finally 代码块解释为其余的不完整代码块对我来说才有意义细绳。

我的问题是如何处理这种格式的语法错误?还是有更有效的(pythonic?)方法来解决这个问题?

这可能不是人们真正遇到的事情,但知道是否有一个干净的解决方法会很有趣。

谢谢!

答案很简单:

SyntaxError 使 exceptfinally 语句无效,因为它们在字符串内部。

您不能使用 try/except 块来捕获语法错误的原因是这些错误发生在您的代码执行之前。

Python 代码执行的高级步骤

  1. Python 解释器将 Python 代码翻译成可执行指令。 (出现语法错误)
  2. 指令已执行。 (Try/Except 块已执行)

由于错误发生在步骤 1 中,因此您不能使用 try/except 拦截它们,因为它仅在步骤 2 中执行。