首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法错误能被处理吗?

语法错误能被处理吗?
EN

Stack Overflow用户
提问于 2013-12-28 15:46:43
回答 2查看 1.6K关注 0票数 16

考虑以下代码:

代码语言:javascript
复制
try:
    if True a = 1  #It's missing a colon So it's a SyntaxError!!!!!!!
except SyntaxError:
    print 'hey'

您可能期望它打印hey,但是它会引发一个SyntaxError,这与我试图避免的错误相同。那么,所有的异常都可以使用try-except块来处理吗?那么,如果SyntaxError是一个例外,为什么它包含在内建例外中呢?最后,我如何修复上面的代码,以便它能够正确地处理异常呢?

注意:我知道我想做的是毫无意义的,没有真正的目的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-28 15:56:40

SyntaxError是一个非常普通的内置例外。这在任何方面都不是特别的。只有当它(通常)被抛出的情况是有点不寻常的。

语法错误意味着所述错误的代码不能被解析为。它甚至没有开始成为一个有效的程序,因此它不能被执行。因此,在程序运行之前会引发SyntaxError异常,因此无法从程序中捕获。

更具体地说,这个异常是由解析器引发的。因为解析器在代码执行之前完全运行,而不是与其交织,所以程序无法捕获自己的语法错误。

不过,解析器本身只是另一个程序:调用解析器的代码可以像每个其他异常一样捕获SyntaxError(因为它与每个其他异常一样)。“调用解析器”的示例包括:

  • compileexeceval
  • import语句
  • asttokenizerparser等模块中的一些功能。
票数 26
EN

Stack Overflow用户

发布于 2013-12-28 15:50:26

当然,当编译器/解析器遇到语法错误时,您需要将SyntaxError作为内置的异常引发什么?

您是对的,这个错误通常发生在编译时,这是在您能够捕获它之前(运行时)。(你如何从这件事中恢复过来?)

不过,我可以想到一个例外:

代码语言:javascript
复制
>>> try:
...    eval("hello =")
... except SyntaxError:
...    print("Hey! Who's using eval() anyway??")
...
Hey! Who's using eval() anyway??
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20816332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档