python3xiaobaike_2020/chapter8/8-4 python3小白课:异常机制中的else块.md
2025-04-20 23:22:14 +08:00

112 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 正确 |