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

时间:2017-07-19 19:05:36

标签: python syntax-error jupyter-notebook eol try-except

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

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笔记本环境中尝试了几次,只有当我移动到VIM中的终端时才对我有意义,编译器将except和finally代码块解释为不完整字符串的其余部分。

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

它可能不是真正遇到过的东西,但知道是否有一个干净的解决方法会很有趣。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

Python代码执行的高级步骤

  1. Python解释器将Python代码转换为可执行指令。 (语法错误引发)
  2. 执行指令。 (尝试/执行块除外)
  3. 由于在步骤1中发生错误,您不能使用try / except来拦截它们,因为它只在步骤2中执行。

答案 1 :(得分:-1)

答案很简单:

SyntaxError会使exceptfinally语句无效,因为它们位于字符串中。