前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|try/except捕捉SyntaxError

Python|try/except捕捉SyntaxError

作者头像
不可言诉的深渊
发布2019-07-26 16:59:04
1.9K0
发布2019-07-26 16:59:04
举报
文章被收录于专栏:Python机器学习算法说书人

错误和异常

大家在编写程序的时候,多多少少都会出现各种问题。有的时候会让你的程序根本无法运行起来,有的时候会让你的程序在运行过程中出毛病。如果是第一种情况,我们把这个问题叫做程序错误;如果是第二种情况,我们把这个问题叫做程序异常。

处理错误和处理异常

当程序出现了问题,总要想办法处理。如果程序在运行前出错,就需要自己修正,让程序能运行。如果程序在运行时出错,程序特别简单时,我们可以使用条件判断避开出错的情况,如图所示。

这里就是一个简单的获取一个数组指定位置的元素,位置让用户输入,在用户输入的过程中我们首先要考虑用户输入的是不是一个整数。如果不是整数,就需要告诉用户输入错误;如果是整数,就继续判断这个整数是不是在合理的范围内。如果不在合理的范围内,就告诉用户出错。如果在合理的范围内,就正常输出用户想要的东西。就这么简单的一个程序,写这么多条件判断确实有点繁琐。如果遇到复杂的程序,if估计得嵌套死。有没有简单的方法,比如我只用一个if判断。办法还是有的,就是使用try/except来捕获这样的问题,修改代码如图所示。

看上去比第一种方法简单了好多,所以处理问题建议使用try/except,那么问题来了,是不是任何情况下都可以try/except呢?!答案显然是不可以的,try/except只能在程序运行时起作用,万一程序在运行前出错,这种方法就不再适用了。我们来看下面一个例子。

这个程序很明显,在try里面有一个SyntaxError,到底能不能被捕捉到呢?运行一下看看就知道了,运行结果如图所示。

这就说明SyntaxError(语法错误)出现在运行前,而不是在运行时检查语法。同样的错误还有IndentationError(缩进错误)……

既然SyntaxError出现在运行前,为什么我今天的标题是Python|try/except捕捉SyntaxError呢?这是因为SyntaxError并不总是出现在运行前,有的时候会在运行时出现。要想让它在运行时出现,我必须首先介绍两个函数——exec和eval。

exec和eval

exec和eval到底是何方神圣,我直接使用help来进行查看了,首先是exec,如图所示。

稍微翻译一下,这个函数主要是用来执行存放在字符串中的代码。下面再来看一下eval,如图所示。

稍微翻译一下,这个函数主要用来计算字符串表达式的值,和执行代码还是有点不一样的!

当字符串代码出现SyntaxError

下面我直接验证一下当字符串代码出现SyntaxError时能不能捕获,如图所示。

运行结果如图所示。

从运行结果中可以看出,SyntaxError被捕获了,程序并没有崩溃。为什么会这样?我们先分析一下程序的执行过程:首先检查语法和缩进有没有问题,然后开始执行程序,try里面调用exec这个函数,在这个函数的执行过程中,解释器发现了问题,此时except捕获了这个问题。这里引发的SyntaxError是运行时的SyntaxError,不是运行前的。既然是运行时的问题,就可以被捕获!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档