# python3小白课:异常机制中的else块 在python的异常处理中还能加入else块,简单来说,当try块的代码没有出现异常的时候,会执行else块的代码。 我们直接来看一个很简单的例子: ```python # coding:utf-8 try: print("我没有异常") except: print("发生异常情况") else: print("我是else块,因为try块没有异常执行我") ``` 可以看到,else块中的代码被正常执行了。 有的同学可能会有疑问,既然这样,咱们把else块中的代码放到try块的末尾去执行不就好了吗? 我们来根据这样的想法,修改一下例子如下: ```python # 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块中时,会向外传播异常,甚至终止程序那么我直接把这块代码写在异常处理块的外部,不是效果一样的吗?比如我这样写?(仅写修改的部分) ```python try: print("try块代码无异常") except: print("程序出现异常") else_test() ``` 没错!这样写似乎的确是一样的,那么else块的作用还体现在哪些方面呢? > [!tip] > > 我遍寻了网上很多资料,其实各种网站、博客都没有说清楚这一点,那就是,else块的作用,除了当try块的代码没有出现异常的时候,会执行else块的代码以外,还有一个延伸的话,那就是当try块代码`有异常`的时候,就不会执行else块的代码了! > > 而如果你将else块的代码写在异常处理块的外部,则无法实现这样的效果。 上述代码可以改成这样: ```python # 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 | 正确 |