112 lines
3.4 KiB
Markdown
112 lines
3.4 KiB
Markdown
# 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 | 正确 |
|
||
|