pythontrycatch打印到日志_python异常处理和日志处理方式

pythontrycatch打印到⽇志_python异常处理和⽇志处理⽅式今天,总结⼀下最近编程使⽤的python异常处理和⽇志处理的感受,其实异常处理是程序编写时⾮常重要的⼀块,但是我⼀开始学的语⾔是C++,这门语⾔中没有强制要求使⽤atch语句,因此我通常编写代码的时候忽略了这⼀块,直到开始学习java的时候,发现好多时候编写代码必须加上atch 模块,然⽽我每次都不深⼊理解,仅仅使⽤eclipse⾃动补全功能加上atch模块,或者直接在类上加⼊throws Exception最省事,完全不⽤思考。
最近在编写python代码的时候,发现python好多代码也有atch模块,实在是不想再继续不理解了,于是⾃⼰思考了⼀下。
python异常处理
python的异常处理代码很简单,如下所⽰:
try:
...(可能出现异常的代码)
except ...(Python内置异常类或者⾃⼰实现的异常类) as e: (或者直接except:)
...(处理该异常的代码)
我平常根本不管异常处理,什么异常都直接不管,因为控制台会打印出现异常的那⼀⾏,然后如果出现错误,我就根据那⼀⾏仔细思考可能出现的逻辑错误。今天,我仔细思考了⼀下,我这样做会出现两个主要问题:
任何错误都会导致程序中断错误提⽰不明显,错误的时间变长
解释:
问题1:我之所以总是忽略该问题,因为我平常编的程序都是⽐较⼩的程序,有异常就中断没什么影响,但是如果未来 我跟别⼈合作,编写⼀个模块的程序,如果每次我这个模块出现异常,整个程序就中断,那么后果不堪设想!
问题2:为了解释问题2,我们举⼀个例⼦。假如我要处理⼀个⽇志⽂件,⾥⾯的内容如下:
电暖手套Jul 16 03:27:01 node69 sced[22053]: Connection from
Jul 16 03:27:01 node69 sced[22053]: SSH: Server;Ltype
磁带备份Jul 16 03:27:01 node69 sced[22053]: SSH: Server;Ltype
Jul 16 03:27:11 node69 sced[23417]: Connection from
Jul 16 03:27:11 node69 sced[23417]: Connection from
Jul 16 03:27:11 node69 sced[23417]: SSH: Server;Ltype
Jul 16 03:27:11 node69 sced[23417]: SSH: Server;Ltype
Jul 16 03:27:20 node69 sced[23454]: Connection from
220v交流稳压器Jul 16 03:27:20 node69 sced[23454]: Connection from
我的⽬标是提取每⾏字符串⾥⾯的sced这个名字,显然,使⽤python⼀句话即可:
s = line.split()[4].split('[')[0].strip(':')
这样做没错,但是⽇志⽂件通常会很多,⽐如⼀共有百万⾏的⽇志,⽽且可能会出现错误,⽐如空⾏,或者有些⽇志输出的只有⼀半的⾏,如下所⽰:
Jul 16 03:27:01 node69 sced[22053]: SSH: Server;Ltype
(空⾏)
Jul 16 03:27:11 node69 sced[23417]: Connection from
Jul 16 03:27:11 node69 sced[23417]: Connection from
Jul 16 03:27:11 (只有⼀半的⾏)
Jul 16 03:27:11 node69 sced[23417]: SSH: Server;Ltype
这样在处理的时候,就会抛出数组越界异常,同时程序中断,每次我遇到问题,总是⾃⼰思考怎么回事,但是 如果不知道异常的那⼀⾏什么样⼦,我⾃⼰思考总是花费很长时间!⽽且每次解决⼀个问题,下次再出现另⼀个 问题的时候,⼜要重复这个过程!如果我能⼀次从头到尾处理这些数据,遇到问题将问题的那⾏打印出来,然后 程序还能够不中断该多好!显然,异常语句就应运⽽⽣!,代码如下:
with open(fileName, 'r',encoding = 'utf-8' ,errors='ignore') as f:
for line adlines():滨州玻璃垫片
try:
s = line.split()[4]料理机
s = s.split('[')[0].strip(':')
theDict[s] = 1 (s,-1) == -1 else theDict[s]+1 #先得到⽇志的程序名出现次数的字典
中央供氧
except:
# raise
⼀开始,我不知道会遇到什么异常的情况,就把异常打印出来,然后不抛出raise,如果你想要出现异常,后⾯的数据都不处理了,那就把raise注释去掉,我感觉raise就像程序中的return的作⽤。
我的⽬标是运⾏⼀次,把所有可能的没法处理的情况的⾏都打印出来,如上述的写法,就实现了这个功能,可见,异常处理的语句多么有⽤。
总结⼀下:
编程本质就是实现某个逻辑,但是你没法把逻辑的所有情况都考虑到,此时加上异常处理模块,将异常打印出来,这样就能在出现异常时将异常的数据提取处理,根据这些数据继续改进⾃⼰的程序的逻辑!
⽇志处理
说道⽇志处理,我最⼤的体会是我以前编程从来不⽤⽇志,每次都是cout、System.out.println或者print这种直接控制台输出语句调试程序,但是最近我研究的⽅向是⽇志处理,于是只能仔细看看为啥还需要⽇志。
⽐如我上⾯的代码,在except后⾯打印的是ption,这⾏语句在运⾏时没啥区别,都会在控制台中显⽰对应的异常处理的那句话,但是在后期其作⽤就⼤了,因为⽇志除了打印功能外,有两个附加功能:
可以根据设定的等级打印对于⽇志输出语句
可以将⽇志写本地,为后期查错误时使⽤
import logging
logging.basicConfig(level=logging.DEBUG) #这句话没次第⼀次运⾏时⽣效,修改必须重启Console
根据⽇志等级,我们就可以控制不同的等级的⽇志是否显⽰,还能控制⽇志存储的位置,这样在我们不在现场调试的时候,根据⽇志的显⽰结果就能够知道程序的异常情况,⾮常⽅便!
以上这篇python异常处理和⽇志处理⽅式就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持我们。
本⽂标题: python异常处理和⽇志处理⽅式

本文发布于:2024-09-21 21:57:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/143625.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:处理   程序   时候   打印   错误   问题
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议