Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2454109
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: Python/Ruby

2014-01-28 11:08:16

Python的异常处理可以向用户准确反馈出错信息,所有异常都是基类Exception的子类。自定义异常都是从基类Exception中继承。Python自动将所有内建的异常放到内建命名空间中,所以程序不必导入exceptions模块即可使用异常。

捕获异常的方式


方法一:捕获所有的异常

  1. try:
  2.         a = b
  3.         b = c
  4.     except Exception,data:
  5.         print Exception,":",data
  6.     '''输出:<type 'exceptions.Exception'> : local variable 'b'
  7. referenced before assignment '

方法二:采用traceback模块查看异常,需要导入traceback模块,这个方法会打印出异常代码的行号

  1. try:
  2.     a = b
  3.     b = c
  4. except:
  5.     print traceback.print_exc()

  6. '''输出: Traceback (most recent call last):
  7. File "test.py", line 20, in main
  8. a = b
  9. UnboundLocalError: local variable 'b

方法三:采用sys模块回溯最后的异常

  1. try:
  2.     a = b
  3.     b = c
  4. except:
  5.     info = sys.exc_info()
  6.     print info
  7.     print info[0]
  8.     print info[1]

  9. '''输出:
  10. (<type 'exceptions.UnboundLocalError'>, UnboundLocalError("local
  11. variable 'b' referenced before assignment",),
  12. <traceback object at 0x00D243F0>)
  13. <type 'exceptions.UnboundLocalError'>
  14. local variable 'b' referenced before assignment
  15. '''

获取函数名和行号


上面介绍的方法二回打印出问题代码的行号,还有一些方法可以获取函数名和行号

  1. #!/usr/bin/python
  2. import sys
  3. def get_cur_info():
  4.     """Return the frame object for the caller's stack frame."""
  5.     try:
  6.         raise Exception
  7.     except:
  8.         f = sys.exc_info()[2].tb_frame.f_back
  9.     return (f.f_code.co_name, f.f_lineno)
  10.  
  11. def callfunc():
  12.     print get_cur_info()
  13.  
  14.  
  15. if __name__ == '__main__':
  16.     callfunc()

  1. import sys
  2. def get_cur_info():
  3.     print sys._getframe().f_code.co_name
  4.     print sys._getframe().f_back.f_code.co_name
  5. get_cur_info()

阅读(5049) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~