2008-05-11

异常捕捉

关键字: 异常捕捉

                               异常捕捉问题

traceback.print_exc(1)

这个是个好方法,先写在这里,以供各位观赏.用途不言而喻.

 

小心捕捉了异常,而让上层看不到是什么问题.还不如不捕捉呢!

如果要捕捉异常,最好是捕捉到什么异常就抛出什么异常,在抛出之前,写日志什么,好方便以后调试.

不然如果想这样抛出异常,上层有时候是看不到的:

 try:
        pass
    except  Exception, e:
        raise e, "连接数据库失败或者插入数据失败"

外面看到的仅仅是这个错误提示,还不如直接raise e最好了.

对比下面的异常提示:

""""


Traceback (most recent call last):
  File "./s_test.py", line 83, in ?
    job.notify( "utp", 55, 2,2, "way1_test" )
  File "./s_test.py", line 77, in notify
    writeDb( data_dict )
  File "/home/mon/py/db/writedb.py", line 65, in writeDb
    raise e, "连接数据库失败或者插入数据失败"
TypeError: instance exception may not have a separate value

"""

______________________________________________________________________

 "连接数据库失败或者插入数据失败"

Traceback (most recent call last):
  File "./s_test.py", line 83, in ?
    job.notify( "utp", 55, 2,2, "way1_test" )
  File "./s_test.py", line 77, in notify
    writeDb( data_dict )
  File "/home/mon/py/db/writedb.py", line 66, in writeDb
    raise e
NameError: global name 'db' is not defined


______________________________________________________________________

第一条看到关键的是"TypeError: instance exception may not have a separate value"

第二条看到关键的是"NameError: global name 'db' is not defined"

第二种情况,就可以看出来,程序出错的位置,和原因.第一条是我用了好长的时间去测试的对象.

最后发现是异常捕捉问题

评论
发表评论

您还没有登录,请登录后发表评论