摘要:概述在編程中,經(jīng)常需要處理出現(xiàn)的錯(cuò)誤,比如說編程中出現(xiàn)的異常,網(wǎng)絡(luò)超時(shí)等等,有的錯(cuò)誤是可以估計(jì)到的,比如說肯定是錯(cuò)誤的除法,一些是估計(jì)不到的。一般來說,會(huì)在程序中創(chuàng)建一個(gè)類,用來專門的處理。
概述
在編程中,經(jīng)常需要處理出現(xiàn)的錯(cuò)誤,比如說編程中出現(xiàn)的異常,網(wǎng)絡(luò)超時(shí)等等,有的錯(cuò)誤是可以估計(jì)到的,比如說 0 / 1 肯定是錯(cuò)誤的除法,一些是估計(jì)不到的。 但是不能因?yàn)橛绣e(cuò)誤,整個(gè)程序就停止了,程序的魯棒性就體現(xiàn)在面對錯(cuò)誤,能夠處理錯(cuò)誤
錯(cuò)誤處理語句try: pass except Exception as e: print(e)
上面的程序會(huì)把導(dǎo)致程序出錯(cuò)的原因,一句話描述出來,這樣有時(shí)候不免顯得不夠清晰,我們可以使用下面的代碼,顯示出錯(cuò)的堆棧
try: s = 0 / 1 except Exception as e: print(traceback.from_exec())自建異常對象
python的所有內(nèi)建的異常,全部繼承于BaseException 這個(gè)類,官方文檔看到,自建異常對象推薦是創(chuàng)建一個(gè)Error 類, Error 類繼承 Exception 類,然后具體的異常對象在繼承這個(gè)Error 類
class Error(Exception): pass class InputError(Error): def __init__(self,message): self.message = message def __str__(self): return self.message def test_exception(): i = 1 if i == 1: raise InputError("the number can"t equal to 1") try: test_exception() except InputError as e: print(e)log
知道了異常和如何處理異常,在調(diào)試的過程中是十分方便的,但是如果程序已經(jīng)上線了,那個(gè)時(shí)候出了問題,要調(diào)查就需要借助于log 這個(gè)東西了。
一般來說,會(huì)在程序中創(chuàng)建一個(gè)logger 類,用來專門的 log 處理。 可以定義好一個(gè)適合自己的 logger 類,需要的時(shí)候,直接拿來用即可.
# coding:utf-8 import logging,os import logging.handlers import ctypes # 渲染 FOREGROUND_WHITE = 0x0007 FOREGROUND_BLUE = 0x01 # text color contains blue. FOREGROUND_GREEN= 0x02 # text color contains green. FOREGROUND_RED = 0x04 # text color contains red. FOREGROUND_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN # cmd STD_OUTPUT_HANDLE= -11 std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) def set_color(color, handle=std_out_handle): bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color) return bool class Logger(object): def __init__(self,name,path,clevel=logging.DEBUG,flevel=logging.DEBUG): self.logger = logging.getLogger(name) # 這個(gè)必須設(shè)置,否則默認(rèn)不顯示debug或者info的信息,也就是說這個(gè)的配置會(huì)覆蓋掉cmd和file的配置 self.logger.setLevel(logging.DEBUG) # 設(shè)置格式化 _fmt = logging.Formatter("[%(asctime)s] [%(levelname)s] %(name)s : %(message)s", "%Y-%m-%d %H:%M:%S") # 設(shè)置命令行 sh = logging.StreamHandler() sh.setFormatter(_fmt) sh.setLevel(clevel) # 設(shè)置文件log fh = logging.handlers.RotatingFileHandler( path, maxBytes=10240000, backupCount=5, encoding="utf-8" ) fh.setFormatter(_fmt) fh.setLevel(flevel) # 添加處理器 self.logger.addHandler(sh) self.logger.addHandler(fh) def debug(self,msg): self.logger.debug(msg) def info(self,msg): self.logger.info(msg) def warn(self,msg,color=FOREGROUND_YELLOW): set_color(color) self.logger.warn(msg) set_color(FOREGROUND_WHITE) def error(self,msg,color=FOREGROUND_RED): set_color(color) self.logger.error(msg) set_color(FOREGROUND_WHITE) def critlal(self,msg): self.logger.critical(msg) if __name__ =="__main__": logyyx = Logger(__name__,"logs/test2.log",) logyyx.debug("一個(gè)debug信息") logyyx.info("一個(gè)info信息") logyyx.warn("一個(gè)warning信息") logyyx.error("一個(gè)error信息") logyyx.critlal("一個(gè)致命c(diǎn)ritical信息")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42950.html
摘要:看到一篇很好的文章,關(guān)于處理解析失敗的方法,寫的非常詳細(xì),特此裝載過來。再說,沒有錯(cuò)誤怎么會(huì)失敗呢如果是格式錯(cuò)誤,再低版本的都會(huì)告訴你,所以碰上第一個(gè)可能性就往非法字符串想如何處理中的非法字符根據(jù)的編碼范圍,是可以剔除掉非法字符的。 看到一篇很好的文章,關(guān)于處理json_decode解析失敗的方法,寫的非常詳細(xì),特此裝載過來。 一般情況下,獲取到一段json內(nèi)容,直接json_deco...
摘要:概念單元測試又稱模塊測試,是針對軟件設(shè)計(jì)的最小單位程序模塊,進(jìn)行正確性檢驗(yàn)的測試工作。多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測試。單元測試的內(nèi)容在單元測試中進(jìn)行的測試工作需要在以下五個(gè)方面對所測模塊進(jìn)行檢查。 單元測試一直都是考試的熱點(diǎn),近幾年在上午題中出現(xiàn)的頻率很高。在進(jìn)行單元測試時(shí),測試人員需要依據(jù)詳細(xì)設(shè)計(jì)說明書和源程序清單,...
摘要:最近突然意識到,我竟然從來沒有認(rèn)真去處理異常。第三種執(zhí)行一個(gè)會(huì)拋出異常的方法這個(gè)錯(cuò)誤在控制臺(tái)也和常規(guī)報(bào)錯(cuò)。這種是比較常見的錯(cuò)誤。它是一個(gè)全局的異常處理函數(shù),可以抓取所有的異常。 原文: Handling Errors in Vue.js 譯者: Fundebug 本文采用意譯,版權(quán)歸原作者所有 去年一整年,我都在使用最愛的—Vue.js— 來做項(xiàng)目。最近突然意識到,我竟然從來沒...
摘要:上手并過渡到取代的泊學(xué)原文鏈接泊學(xué)代碼秀視頻自從以來,的錯(cuò)誤處理幾乎就是一成不變的。在中,這個(gè)尷尬的現(xiàn)狀,終于被徹底改變了。無論是還是傳統(tǒng)的,只要類型不匹配約束的時(shí)候,就會(huì)導(dǎo)致異常。 上手并過渡到PHP7 取代fatal error的engine exceptions 泊學(xué)原文鏈接泊學(xué)代碼秀視頻 自從PHP 4以來,PHP的錯(cuò)誤處理幾乎就是一成不變的。只不過在PHP 5.0里添加了E_...
摘要:如果應(yīng)用程序不再需要接受有關(guān)用戶的持續(xù)位置更新,則只需調(diào)用函數(shù),如下所示表示一個(gè)唯一的監(jiān)視請求以便將來取消監(jiān)視。 GeolocationAPI學(xué)習(xí),我寫的挺枯燥的,直接跳到最后看示例。 5.1 位置信息 HTML5 Geolocation API的使用方法相當(dāng)簡單。請求一個(gè)位置信息,如果用戶同意,瀏覽器就會(huì)返回位置信息,該位置信息是通過支持HTML5地理定位功能的底層設(shè)備(手機(jī)、筆記本...
閱讀 2547·2021-11-24 10:20
閱讀 2396·2021-09-10 10:51
閱讀 3382·2021-09-06 15:02
閱讀 3118·2019-08-30 15:55
閱讀 2843·2019-08-29 18:34
閱讀 3082·2019-08-29 12:14
閱讀 1219·2019-08-26 13:53
閱讀 2934·2019-08-26 13:43