python中異常處理和日志處理方式的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下python中異常處理和日志處理方式的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比邯山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式邯山網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋邯山地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

python異常處理

python的異常處理代碼很簡(jiǎn)單,如下所示:

try:
 ...(可能出現(xiàn)異常的代碼)
except ...(Python內(nèi)置異常類或者自己實(shí)現(xiàn)的異常類) as e: (或者直接except:) 
 ...(處理該異常的代碼)

我平常根本不管異常處理,什么異常都直接不管,因?yàn)榭刂婆_(tái)會(huì)打印出現(xiàn)異常的那一行,然后如果出現(xiàn)錯(cuò)誤,我就根據(jù)那一行仔細(xì)思考可能出現(xiàn)的邏輯錯(cuò)誤。今天,我仔細(xì)思考了一下,我這樣做會(huì)出現(xiàn)兩個(gè)主要問(wèn)題:

任何錯(cuò)誤都會(huì)導(dǎo)致程序中斷錯(cuò)誤提示不明顯,找錯(cuò)誤的時(shí)間變長(zhǎng)

解釋:

問(wèn)題1:我之所以總是忽略該問(wèn)題,因?yàn)槲移匠>幍某绦蚨际潜容^小的程序,有異常就中斷沒(méi)什么影響,但是如果未來(lái) 我跟別人合作,編寫(xiě)一個(gè)模塊的程序,如果每次我這個(gè)模塊出現(xiàn)異常,整個(gè)程序就中斷,那么后果不堪設(shè)想!

問(wèn)題2:為了解釋問(wèn)題2,我們舉一個(gè)例子。假如我要處理一個(gè)日志文件,里面的內(nèi)容如下:

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 
Jul 16 03:27:20 node69 sced[23454]: Connection from

我的目標(biāo)是提取每行字符串里面的sced這個(gè)名字,顯然,使用python一句話即可:

s = line.split()[4].split('[')[0].strip(':')

這樣做沒(méi)錯(cuò),但是日志文件通常會(huì)很多,比如一共有百萬(wàn)行的日志,而且可能會(huì)出現(xiàn)錯(cuò)誤,比如空行,或者有些日志輸出的只有一半的行,如下所示:

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

這樣在處理的時(shí)候,就會(huì)拋出數(shù)組越界異常,同時(shí)程序中斷,每次我遇到問(wèn)題,總是自己思考怎么回事,但是 如果不知道異常的那一行什么樣子,我自己思考總是花費(fèi)很長(zhǎng)時(shí)間!而且每次解決一個(gè)問(wèn)題,下次再出現(xiàn)另一個(gè) 問(wèn)題的時(shí)候,又要重復(fù)這個(gè)過(guò)程!如果我能一次從頭到尾處理這些數(shù)據(jù),遇到問(wèn)題將問(wèn)題的那行打印出來(lái),然后 程序還能夠不中斷該多好!顯然,異常語(yǔ)句就應(yīng)運(yùn)而生!,代碼如下:

with open(fileName, 'r',encoding = 'utf-8' ,errors='ignore') as f:
 for line in f.readlines():
 try:
  s = line.split()[4]
  s = s.split('[')[0].strip(':')
  theDict[s] = 1 if theDict.get(s,-1) == -1 else theDict[s]+1 #先得到日志的程序名出現(xiàn)次數(shù)的字典
 except:
  logging.exception('文件--' + fileName+'--在解析句子--'+line+'--時(shí)出現(xiàn)異常') #exception代表打印時(shí)也會(huì)打印出系統(tǒng)錯(cuò)誤提示語(yǔ)句
#  raise

一開(kāi)始,我不知道會(huì)遇到什么異常的情況,就把異常打印出來(lái),然后不拋出raise,如果你想要出現(xiàn)異常,后面的數(shù)據(jù)都不處理了,那就把raise注釋去掉,我感覺(jué)raise就像程序中的return的作用。

我的目標(biāo)是運(yùn)行一次,把所有可能的沒(méi)法處理的情況的行都打印出來(lái),如上述的寫(xiě)法,就實(shí)現(xiàn)了這個(gè)功能,可見(jiàn),異常處理的語(yǔ)句多么有用。

總結(jié)一下:

編程本質(zhì)就是實(shí)現(xiàn)某個(gè)邏輯,但是你沒(méi)法把邏輯的所有情況都考慮到,此時(shí)加上異常處理模塊,將異常打印出來(lái),這樣就能在出現(xiàn)異常時(shí)將異常的數(shù)據(jù)提取處理,根據(jù)這些數(shù)據(jù)繼續(xù)改進(jìn)自己的程序的邏輯!

日志處理

說(shuō)道日志處理,我大的體會(huì)是我以前編程從來(lái)不用日志,每次都是cout、System.out.println或者print這種直接控制臺(tái)輸出語(yǔ)句調(diào)試程序,但是最近我研究的方向是日志處理,于是只能仔細(xì)看看為啥還需要日志。

比如我上面的代碼,在except后面打印的是logging.exception,這行語(yǔ)句在運(yùn)行時(shí)沒(méi)啥區(qū)別,都會(huì)在控制臺(tái)中顯示對(duì)應(yīng)的異常處理的那句話,但是在后期其作用就大了,因?yàn)槿罩境舜蛴」δ芡猓袃蓚€(gè)附加功能:

可以根據(jù)設(shè)定的等級(jí)打印對(duì)于日志輸出語(yǔ)句

可以將日志寫(xiě)本地,為后期查找錯(cuò)誤時(shí)使用

import logging
logging.basicConfig(level=logging.DEBUG) #這句話沒(méi)次第一次運(yùn)行時(shí)生效,修改必須重啟Console

根據(jù)日志等級(jí),我們就可以控制不同的等級(jí)的日志是否顯示,還能控制日志存儲(chǔ)的位置,這樣在我們不在現(xiàn)場(chǎng)調(diào)試的時(shí)候,根據(jù)日志的顯示結(jié)果就能夠知道程序的異常情況,非常方便!

看完了這篇文章,相信你對(duì)“python中異常處理和日志處理方式的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱:python中異常處理和日志處理方式的示例分析-創(chuàng)新互聯(lián)
文章鏈接:http://muchs.cn/article0/coehoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)網(wǎng)站維護(hù)、用戶體驗(yàn)、自適應(yīng)網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管