当前位置: 首页 > 科技观察

while、for、tryexcept语句中的else

时间:2023-03-11 22:16:58 科技观察

Python中的else是最基本的语句,它的两种用法形式是:ifcondition:doSomeThingselse:doAnthorThings和ifcondition1:do1elifcondition2:do2else:doOtherThings这两种用法是不是可以理解的问题。接下来要看的是for、while循环和try异常处理语句中else的用法。1、elseforinfor,while循环,while循环中,else用于正常结束循环,循环体中没有break、return和抛出的异常,然后执行else语句块中的内容。比如我们判断列表ls中的数字是否都是奇数。一般情况下,需要引入一个标志变量allOdd,表示所有变量都是奇数,如果有偶数就设置这个变量为False。写法如下:ls=[1,3,5,7,9]allOdd=Trueforiinls:ifi%2==0:allOdd=FalsebreakfallOdd:print('listls%rconstructedbyonlyoddnumber'%ls)else:print('listls%r**is\'t**constructedbyonlyoddnumber'%ls)用else表示循环正常结束,用for循环或者while循环加else写法如下:foriinls:ifi%2==0:print('listls%r**is\'t**constructedbyonlyoddnumber'%ls)breakelse:print('listls%rconstructedbyonlyoddnumber'%ls)可以看出,for循环使用else语句后,指示变量allOdd和保存相应的处理语句。整个程序在语义上更加简洁,逻辑上更加流畅。2、try异常处理语句中的elsetryexcept异常捕获处理语句,else定义为没有异常发生时执行的部分。例如,当我们处理可能导致异常的计算时,else语句定义的部分可以保证不发生异常,得到正确的计算结果。一个例子是计算简单的除法。普通写法:try:result=a/bprint(result)exceptTypeError:print('Enteranumber')exceptZeroDivisionError:print('被除数不能为零')使用else语句时写法:try:result=a/beexceptTypeError:print('请输入一个数字')exceptZeroDivisionError:print('被除数不能为零')else:print('计算结果%r'%result)即tryexceptelsefinally分别对应如下关系:try可能抛出异常的语句。except捕获异常并处理异常。else没有异常,显然try语句中没有异常。而不是这两种情况:有异常;有一个例外,但它被处理了。finally有无异常执行的语句,一般用于关闭和清理工作。tryexcept语法中else语句的主要作用是明确指出没有异常发生时执行的语句块。它独立于异常,或者异常和两种情况的处理。该语法块在没有异常发生时执行,保证了环境的正确性。3、小结在forwhile循环中,else用于正常结束循环,循环体中没有break、return或异常抛出,然后执行else语句块中的内容。在tryexcept异常捕获处理语句中,定义了else在没有异常发生时执行。与ifelse语句不同的是,上面的两个else用法看起来有点复杂。简单理解,else语句块可以看做是语句体中“没有蛀虫”时执行的语句块。这样else的两种用法就很容易理解了。很多人反对在这里重用else关键字来表示异常,认为then关键字可能更好(lucianoramalho《fluent python》),甚至提倡遵循“最小惊奇原则”,即在for和的上下文中而不要使用else关键字,以免造成混淆(BrettSlatkin《Effective Python》)。笔者认为,如果将两个else统一为“没问题,没毛病”,那么此时的else语法就会成为一个非常有用的技巧。