前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >诡异的else

诡异的else

作者头像
不可言诉的深渊
发布2019-07-26 16:56:44
9200
发布2019-07-26 16:56:44
举报

计算机程序由两部分组成,数据和语句。每一类数据有一个对应的数据类型,不同编程语言有不同的分类方法,但是不管怎么说,任何语言都有整数、小数、字符串。但是程序都是需要对数据进行处理的,我们用语句来实现数据的处理,语句主要有两大类——条件语句和循环语句(当然还有赋值语句啥的)。在条件语句中,我们通常会写if … else …或者 if … elif … else …,这两个语句大家用的多应该都知道是如何执行的,我就不讲了。刚学编程的新手经常都会认为if和else必须成对出现,要么只能有if,反正就是不能单独出现else。实际上else可以脱离if而存在,但是else自己不能单独存在,但也不是所有的语句都能够和else缠在一起的,比如import语句。能够和else缠在一起的语句有3种:try … except … else …,while … else …,for … else …。下面将一一介绍这三种。

try … except … else …

在有些情况下,在没有出现异常时执行一个代码块很有用。为此,可以使用try … except … else …语句,它的执行方式是当try执行完之后没有任何异常,跳过except,直接执行else的语句,如果有异常,要么被except排除,要么就程序崩溃。程序崩溃就不用多说了,必然不会继续执行了。当被except排除的时候,会执行完except语句里面的内容,然后直接跳过else执行后面的内容。下面来看一个例子。

运行结果如下:

这是在没有异常的情况下的执行结果,也就是try执行完后直接执行else了,接下来我们随便弄一个有异常的语句,代码修改如下:

很明显它会引发一个NameError的异常,因为我a没有定义就去使用,我捕捉的是异常基类,所以任何异常都能捕捉(除了SyntaxError,这个错误大部分情况并不是在运行时触发,而是在解释器检查语法时就触发了。如果想让这个错误在运行时触发,我们就需要绕过运行之前的语法检查,我们可以用exec这个函数传入一个字符串参数,exec是用来执行存放在字符串中的Python代码的,程序运行时,exec执行途中发现参数中有一处语法错误,这个时候语法错误是在运行时产生的,所以就可以被捕获。异常一定是在运行时产生的!)程序的运行结果如下:

从执行结果我们看出,它执行try里面的第一句就引发了异常,之后的也就都没有执行,直接跳到except了,然后跳过else执行后面的内容(后面啥都没有,直接正常退出了)。

while … else …

通常,在循环中使用break是因为你“发现”了什么或“出现”了什么情况。要在循环提前结束时采取某种措施很容易,但有时候你可能想在循环正常结束时才采取某种措施。如何判断循环是提前结束还是正常结束的呢?可在循环开始前定义一个布尔变量,然后在满足条件需要break时,在break之前先将它进行逻辑非的运算,然后将结果付给其本身。这样就可在循环后面使用一条if语句来判断循环是否是提前结束的。如图所示:

一种更简单的方法是在循环后面添加一条else语句,它仅在没执行break时执行。修改上面的代码如下即可:

for … else …

for … else …和while … else …执行过程完全一样,在这就不详细讲解了。这两个语句主要是用来手动实现顺序查找的,顺序查找就是从第一个找到最后一个,当然还有一种查找方式叫二分查找,二分查找比顺序查找快,但是只适用于排好序的数组。

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

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

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

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

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