try: block except [exception,[data…]]: block try: block except [exception,[data...]]: block else: block该种异常处理语法的规则是:
try: f = open(“file.txt”,”r”) except IOError, e: print e捕获到的IOError错误的详细缘由会被放置在对象e中,而后运行该异常的except代码块,也可使用如下方法来捕获全部的异常:
try: a=b b=c except Exception,ex: print Exception,":",ex使用except子句须要注意的事情,就是多个except子句截获异常时,若是各个异常类之间具备继承关系,则子类应该写在前面,不然父类将会直接截获子类异常,放在后面的子类异常也就不会执行到了。
try: block finally: block该语句的执行规则是:
try: raise MyError #本身抛出一个异常 except MyError: print 'a error' raise ValueError,'invalid argument'捕捉到的内容为:
type = VauleError message = invalid argument3、跟踪查看异常
try: block except: traceback.print_exc()
4、采用sys模块回溯最后的异常 python
import sys try: block except: info=sys.exc_info() print info[0],":",info[1]
或者以以下的形式: app
import sys tp,val,td = sys.exc_info()sys.exc_info()的返回值是一个tuple, (type, value/message, traceback)
#coding:utf-8 #基于python2.6 import logging,os,time,traceback class LOG: def __init__(self,logger): self.fileHandlerName = '' self.fileHandler = None self.loggerName = logger self.logger = logging.getLogger(logger) self.logger.setLevel(logging.DEBUG) self.formatter = logging.Formatter("=========================\ntime:%(asctime)s \nlogger:%(name)s \nlevel:%(levelname)s \nfile:%(filename)s \nfun:%(funcName)s \nlineno:%(lineno)d \nmessage:%(message)s") # 控制台 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) ch.setFormatter(self.formatter) self.logger.addHandler(ch) path = os.path.abspath(os.path.dirname(__file__)) + '/log/'+self.loggerName+'/' print 'log path=',path def setfh(self): fname = time.strftime("%Y%m%d%H") if fname!=self.fileHandlerName: #移除原来的句柄 if self.fileHandler!=None : self.logger.removeHandler(self.fileHandler) #设置日志文件保存位置 path = os.path.abspath(os.path.dirname(__file__)) + '/log/'+self.loggerName+'/' print path if os.path.isdir(path) == False: os.makedirs(path) fh = logging.FileHandler(path+fname+'.log') fh.setLevel(logging.DEBUG) fh.setFormatter(self.formatter) self.logger.addHandler(fh) self.fileHandlerName = fname self.fileHandler = fh #格式化日志内容 def _fmtInfo(self,msg): if len(msg)==0: msg = traceback.format_exc() return msg else: _tmp = [msg[0]] _tmp.append(traceback.format_exc()) return '\n**********\n'.join(_tmp) #封装方法 def debug(self,*msg): _info = self._fmtInfo(msg) try: self.setfh() self.logger.debug(_info) except: print 'mylog debug:' + _info def error(self,*msg): _info = self._fmtInfo(msg) try: self.setfh() self.logger.error(_info) except: print 'mylog error:' + _info def info(self,*msg): _info = self._fmtInfo(msg) try: self.setfh() self.logger.error(_info) except: print 'mylog info:' + _info def warning(self,*msg): _info = self._fmtInfo(msg) try: self.setfh() self.logger.error(_info) except: print 'mylog warning:' + _info if __name__=='__main__': log = LOG('fight') try: print 1/0 except: log.error() #使用系统本身的错误描述 try: print 2/0 except: log.error('搞错了,分母不能为0') #使用本身的错误描述
运行一下,咱们会在该文件目录下的log/fight下看到一个日志文件,记录的描述内容以下: 函数