博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中try except处理程序异常的三种常用方法
阅读量:7080 次
发布时间:2019-06-28

本文共 2021 字,大约阅读时间需要 6 分钟。

hot3.png

如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:

try:    语句1    语句2    .    .    语句Nexcept .........:    do something .......

但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在"except ......"这句应怎样来写呢?

总结了一下3个方法

方法一:捕获所有异常

try:      a=b      b=c  except Exception,e:      print Exception,":",e

方法二:采用traceback模块查看异常

#引入python中的traceback模块,跟踪错误import traceback  try:      a=b      b=c  except:      traceback.print_exc()

发生异常时,Python能“记住”引发的异常以及程序的当前状态。Python还维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。记住,异常可能在一系列嵌套较深的函数调用中引发。程序调用每个函数时,Python会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者Python抵达主程序为止。这一查找合适的异常处理程序的过程就称为“堆栈辗转开解”(Stack Unwinding)。解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。

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

#引入sys模块import sys  try:      a=b      b=c  except:      info=sys.exc_info()      print info[0],":",info[1]

sys.exc_info()的返回值是一个tuple, (type, value/message, traceback)

这里的type ---- 异常的类型

value/message ---- 异常的信息或者参数

traceback ---- 包含调用栈信息的对象。

从这点上可以看出此方法涵盖了traceback.

但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:

把 traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中

import tracebacktry:      a=b      b=c  except:      f=open("c:log.txt",'a')      traceback.print_exc(file=f)      f.flush()      f.close()

无论try是否发生异常,finally总会执行

def catcher():      try:          ...      finally:          print 'after fecth'

finally执行的顺序和java中的一样。

try无异常,才会执行else

def catcher():      try:          ...      except:          print "got exception"      else:          print "not exception"

利用raise传递异常

def catcher():      try:          ...      except:          print "got exception"          raise

raise语句不包括异常名称或额外资料时,会重新引发当前异常。如果希望捕获处理一个异常,而又不希望异常在程序代码中消失,可以通过raise重新引发该异常。

except(name1, name2)

def catcher():      try:          fetcher(x, 4)      except(TypeError, IndexError):          print "got exception"      else:          print "not exception"

捕获列表列出的异常,进行处理。若except后无任何参数,则捕获所有异常。

转载于:https://my.oschina.net/u/2000675/blog/725595

你可能感兴趣的文章
CDOJ 26 遮挡判断(shadow) 解题报告
查看>>
imperva 默认策略添加例外
查看>>
[翻译] Autofac 中注册的概念
查看>>
网上购物系统(Task102)——登录控件的使用(登录控件的基本配置)
查看>>
项目添加大量js文件时关闭Eclipse校验机制
查看>>
AC日记——线段树练习4 codevs 4919
查看>>
python之路--初识面向对象
查看>>
云与移动有何共同点?
查看>>
彩票软件3)wpf界面布局
查看>>
【转载】Spring Cloud全家桶主要组件及简要介绍
查看>>
Go解析写死的json
查看>>
数据库之mac上mysql root密码忘记或权限错误的解决办法
查看>>
sql变量、分页、存储过程、触发器
查看>>
zabbix server3.4 使用mailx配置邮件报警
查看>>
《软件工程》前期工作总结
查看>>
Python知识点记录四(JSON)
查看>>
DDCTF 2018线上赛writeup
查看>>
EDK2与EDK2工具链关系图
查看>>
bzoj千题计划133:bzoj3130: [Sdoi2013]费用流
查看>>
知识点7: 跨域问题
查看>>