论坛首页 编程语言技术论坛

python异常捕获try except

浏览 46101 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-29   最后修改:2009-07-10
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.
>>>



注意,finally中,如果出现异常,外部如果没有相应的捕获机制,该异常会层层抛出,直到最顶端,然后解释器停止
一般我们会这样做
>>> try:
...     try:
...         fd=open("no-exists-file", "r")
...         print "do some thing ,read file ,write file..."
...     finally:
...         fd.close()
...except:
...    print "catch finally exception."
do some thing ,read file ,write file...
>>>


3. 封装了一个全局的捕获异常的函数(偶比较懒,就用了全部的捕获异常方法)

import traceback
import sys
def trace_back():
    try:
        return traceback.print_exc()
    except:
        return ''


具体使用

try:
    do_something()
except:
    print trace_back()



写的比较散,主要是想说说,python异常的简单使用,已经封装的一个简单的获得异常发生时,全局保持的异常信息(可能不准确,但基本够用)
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics