python中else与finally的总结
2024-09-05 07:25:36
1.else的用法
对try...except的补充:
else
子句的使用比在子句中添加其他代码更好,try
因为它避免了意外捕获由try
... except
语句保护的代码未引发的异常。
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except OSError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
2.finally用法
try
语句有一个可选finally子句,用于定义在所有情况下都必须执行的finally操作
try:
raise KeyboardInterrupt
finally:
print('Goodbye, world!') Goodbye, world!
KeyboardInterrupt
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
如果存在finally
子句,则该finally
子句将作为try
语句完成之前的最后一项任务执行。finally
无论该try
语句是否产生异常,该子句都会运行。
以下几点讨论了发生异常时更复杂的情况:
如果在执行该
try
子句期间发生异常,则该异常可以由except
子句处理。如果该异常未由except
子句处理,finally
则在执行该子句后将重新引发该异常。执行
except
orelse
子句期间可能会发生异常。同样,在finally
执行该子句之后,将重新引发异常。如果
try
语句到达break
,continue
或return
语句时,finally
条款将在<try or else or except的>break
,continue
或return
语句之前执行。如果
finally
子句包含一条return
语句,则该finally
子句的return
语句将在<try or else or except的>子句中的return语句之前执行,所以事实上执行了的是finally的return,而不是在<try or else or except>中执行return
语句。
案例1.
>>> def bool_return():
... try:
... return True
... finally:
... return False
...
>>> bool_return()
False
案例2.
def bool_return():
try:
raise Exception
except Exception:
return True
finally:
return False print(bool_return())
False
案例3.
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print("division by zero!")
... else:
... print("result is", result)
... finally:
... print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("", "")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
最新文章
- PHP常用函数整理
- BZOJ2432 [Noi2011]兔农
- 最小集合(51nod 1616)
- ACM: SGU 101 Domino- 欧拉回路-并查集
- TFS 2010 如何删除Collection
- BZOJ1816 [Cqoi2010]扑克牌
- ASP.NET 最佳DataGrid读取单元格的值
- 【JS对象、JSON字符串】之间的相互转换
- Applied Functional Analysis(Applications to Mathematical Physics ) E.Zeidler
- poj1436 Horizontally Visible Segments
- C语言volatile关键字
- java web部署问题
- HTTP Basic Authentication认证的各种语言 后台用的
- getScrollX()理解
- git 创建分支,删除分支,管理分支
- junit--eclipse插件
- [HNOI2009]无归岛
- 【解决】nginx 下$_SERVER[&#39;PATH_INFO&#39;] 无法获取到内容
- drawImg、x5浏览器、react
- 仓储层接口IBaseRepository解析
热门文章
- IPD术语
- Python if __name__ == &#39;__main__&#39;: 理解
- 第7章:LeetCode--算法:递归问题
- Education Reform(CodeForces-119C)【DP】
- Photon Server初识(四) --- 部署自己的服务Photon Server
- 11.vim常用操作
- Zynq-7000 MiZ701 SOC硬件使用手册
- Qt 中配置 c99的问题
- 获取impala下所有的数据库建表语句
- 阿里十年架构师告诉你Spring Boot与Spring Cloud是什么关系