python的异常处理机制设计的比较传统,在日常的开发中,基本满足我的需要
下面就python的异常,几点小小的讨论
1. try...except
tommy@lab3:~$ python
Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
>>> try:
... 1/0
... except:
... print "do something..."
...
do something...
>>>
2. try...finally
finally 里面只是执行完成try中的代码后,必须执行的代码,
即使是 try中有异常抛出,也是会去执行finally
>>> try:
... 1/0
... finally:
... print "I just finally do something ,eg: clear!"
...
I just finally do something ,eg: clear!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
所以,一般情况下,finally里面执行的都是一些清理工作,比如:关闭文件描述符,释放锁等
>>> try:
... fd=open("have-exists-file", "r")
... print "do some thing ,read file ,write file..."
... finally:
... fd.close()
...
do some thing ,read file ,write file...
>>>
多线程中,对锁的使用
tommy@lab3:~$ python
Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import threading
>>> l_lock=threading.RLock()
>>> try:
... l_lock.acquire()
... print "do some thing."
... finally:
... l_lock.release()
...
True
do some thing.
>>>