python3小白课:异常机制中的else块

在python的异常处理中还能加入else块,简单来说,当try块的代码没有出现异常的时候,会执行else块的代码。

我们直接来看一个很简单的例子:

# coding:utf-8
try:
    print("我没有异常")
except:
    print("发生异常情况")
else:
    print("我是else块,因为try块没有异常执行我")

可以看到,else块中的代码被正常执行了。

有的同学可能会有疑问,既然这样,咱们把else块中的代码放到try块的末尾去执行不就好了吗?

我们来根据这样的想法,修改一下例子如下:

# coding:utf-8
s = input("请输入除数:")
def else_test():
    result = 100 / int(s)
    print("100除以%s的结果为:%s" % (s, result))

def wrong():
    try:
        print("try块代码可能有异常")
        else_test()
    except:
        print("程序出现异常")
def right():
    try:
        print("try块代码无异常")
    except:
        print("程序出现异常")
    else:
        else_test()

wrong()
right()

如果我们直接输入一个会异常的除数:0,执行一下会发现,将代码写在try块中,except块会捕获异常,并处理异常,但当会异常的代码写在else块中时,except块不会捕获异常,而是会直接终止程序。

根据这样的试验结论,如果我们系统某段代码的异常能被except块捕获并处理,则将代码写在try块中即可;如果希望某段代码的异常能向外传播(不被except捕获),则可以将代码放在else块中。

可能有的同学还有这样的疑问,当else_test()这部分可能引发异常的代码放在else块中时,会向外传播异常,甚至终止程序那么我直接把这块代码写在异常处理块的外部,不是效果一样的吗?比如我这样写?(仅写修改的部分)

try:
    print("try块代码无异常")
except:
    print("程序出现异常")
else_test()

没错!这样写似乎的确是一样的,那么else块的作用还体现在哪些方面呢?

[!tip]

我遍寻了网上很多资料,其实各种网站、博客都没有说清楚这一点,那就是,else块的作用,除了当try块的代码没有出现异常的时候,会执行else块的代码以外,还有一个延伸的话,那就是当try块代码有异常的时候,就不会执行else块的代码了!

而如果你将else块的代码写在异常处理块的外部,则无法实现这样的效果。

上述代码可以改成这样:

# coding:utf-8
s = input("请输入除数:")
def else_test():
    result = 100 / int(s)
    print("100除以%s的结果为:%s" % (s, result))

def wrong():
    try:
        print("try块代码可能有异常")
        else_test()
    except:
        print("程序出现异常")
    else:
        print("不会执行我这句代码,因为try块有异常")
def right():
    try:
        print("try块代码无异常")
    except:
        print("程序出现异常")
    else:
        else_test()

wrong()
right()

可以看到,当输入除数0的时候,print("不会执行我这句代码,因为try块有异常")这句代码永远不会被执行。

实际运用的时候你可以根据需要来使用else块,从我个人的角度,else块用的确实不多,所以咱们不做为重点。

单词释义

单词 释义
wrong 错误
right 正确
Copyright © 雪山凌狐教程 all right reserved,powered by Gitbook该文件修订时间: 2020-07-12 18:20:53

results matching ""

    No results matching ""