最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python異常處理和日志處理方式

 更新時(shí)間:2019年12月24日 16:41:16   作者:冬之曉東  
今天小編就為大家分享一篇python異常處理和日志處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

今天,總結(jié)一下最近編程使用的python異常處理和日志處理的感受,其實(shí)異常處理是程序編寫時(shí)非常重要的一塊,但是我一開始學(xué)的語言是C++,這門語言中沒有強(qiáng)制要求使用try...catch語句,因此我通常編寫代碼的時(shí)候忽略了這一塊,直到開始學(xué)習(xí)java的時(shí)候,發(fā)現(xiàn)好多時(shí)候編寫代碼必須加上try...catch 模塊,然而我每次都不深入理解,僅僅使用eclipse自動(dòng)補(bǔ)全功能加上try...catch模塊,或者直接在類上加入throws Exception最省事,完全不用思考。

最近在編寫python代碼的時(shí)候,發(fā)現(xiàn)python好多代碼也有try...catch模塊,實(shí)在是不想再繼續(xù)不理解了,于是自己思考了一下。

python異常處理

python的異常處理代碼很簡單,如下所示:

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è)主要問題:

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

解釋:

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

問題2:為了解釋問題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(':')

這樣做沒錯(cuò),但是日志文件通常會(huì)很多,比如一共有百萬行的日志,而且可能會(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í)程序中斷,每次我遇到問題,總是自己思考怎么回事,但是 如果不知道異常的那一行什么樣子,我自己思考總是花費(fèi)很長時(shí)間!而且每次解決一個(gè)問題,下次再出現(xiàn)另一個(gè) 問題的時(shí)候,又要重復(fù)這個(gè)過程!如果我能一次從頭到尾處理這些數(shù)據(jù),遇到問題將問題的那行打印出來,然后 程序還能夠不中斷該多好!顯然,異常語句就應(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ò)誤提示語句
#  raise

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

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

總結(jié)一下:

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

日志處理

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

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

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

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

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

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

以上這篇python異常處理和日志處理方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • appium中常見的幾種點(diǎn)擊方式

    appium中常見的幾種點(diǎn)擊方式

    本文主要介紹了appium中常見的幾種點(diǎn)擊方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python使用PIL庫將PNG圖片轉(zhuǎn)換為ICO圖標(biāo)的示例代碼

    Python使用PIL庫將PNG圖片轉(zhuǎn)換為ICO圖標(biāo)的示例代碼

    在軟件開發(fā)和網(wǎng)站設(shè)計(jì)中,ICO圖標(biāo)是一種常用的圖像格式,特別適用于應(yīng)用程序圖標(biāo)、網(wǎng)頁收藏夾圖標(biāo)等場景,本文將介紹如何使用Python的PIL庫將PNG圖片轉(zhuǎn)換為ICO格式的圖標(biāo)文件,需要的朋友可以參考下
    2025-03-03
  • Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例

    Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例

    asyncore即是一個(gè)異步的socket封裝,特別是dispatcher類中包含了很多異步調(diào)用的socket操作方法,非常犀利,下面我們就來講解Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例
    2016-06-06
  • 利用Python自動(dòng)監(jiān)控網(wǎng)站并發(fā)送郵件告警的方法

    利用Python自動(dòng)監(jiān)控網(wǎng)站并發(fā)送郵件告警的方法

    這篇文章介紹的是通過定時(shí)執(zhí)行python腳本,可以實(shí)現(xiàn)定期批量訪問網(wǎng)站,如果發(fā)現(xiàn)網(wǎng)站打不開,第一時(shí)間發(fā)郵件到管理員郵箱進(jìn)行預(yù)警。有需要的可以參考借鑒。
    2016-08-08
  • python中map的基本用法示例

    python中map的基本用法示例

    map函數(shù)的原型是map(function, iterable, …),它的返回結(jié)果是一個(gè)列表。下面這篇文章主要給大家介紹了關(guān)于python中map的基本用法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換

    Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換

    這篇文章主要為大家介紹了Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法

    Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法

    今天小編就為大家分享一篇Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python實(shí)現(xiàn)最大子序和的方法示例

    Python實(shí)現(xiàn)最大子序和的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)最大子序和的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python 僅獲取響應(yīng)頭, 不獲取實(shí)體的實(shí)例

    Python 僅獲取響應(yīng)頭, 不獲取實(shí)體的實(shí)例

    今天小編就為大家分享一篇Python 僅獲取響應(yīng)頭, 不獲取實(shí)體的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python實(shí)現(xiàn)的求解最小公倍數(shù)算法示例

    Python實(shí)現(xiàn)的求解最小公倍數(shù)算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的求解最小公倍數(shù)算法,涉及Python數(shù)值運(yùn)算、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05

最新評(píng)論

耒阳市| 石景山区| 辽宁省| 沧州市| 财经| 项城市| 勐海县| 姚安县| 犍为县| 封丘县| 德昌县| 莒南县| 三亚市| 灯塔市| 盐池县| 顺平县| 佛坪县| 麻栗坡县| 黄石市| 连南| 张家口市| 彭州市| 华安县| 轮台县| 莱州市| 阜宁县| 云龙县| 霍林郭勒市| 沅江市| 太仆寺旗| 师宗县| 昂仁县| 汉川市| 镇巴县| 项城市| 康保县| 鸡东县| 岳阳县| 镇宁| 兴海县| 西乌珠穆沁旗|