Python 异常处理

企鹅博客
19267
文章
0
评论
2019年7月12日11:26:03 评论 2.6K views 1292字阅读4分18秒

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. def callfunc():
  11. print get_cur_info()
  12. if __name__ == '__main__':
  13. 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()

 

 

推荐阅读:

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

继续阅读
  • 版权声明: 发表于 2019年7月12日11:26:03
  • 转载注明:https://www.qieseo.com/179149.html
在UNIX系统中实现堆栈跟踪 Linux编程

在UNIX系统中实现堆栈跟踪

在程序运行的过程中,如果出现异常,通常会发出一个信号进入信号处理函数中处理。有些故障过于严重到无法实现程序的自恢复。这个时候,程序只能无奈的输出一些错误信息。当然这些错误信息对程序的调试也是非常有帮助...
Linux下C语言url请求 Linux编程

Linux下C语言url请求

任何代码只有你写过,才能深刻理解,有的时候看文档看的很茫然的时候,尽量找点别人的源码,在别人源码上更改,在调试,可能会达到事半功倍的效果。 近来项目需要Linux中访问一个url接口传参数及...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: