成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

5-錯(cuò)誤處理

MonoLog / 1805人閱讀

摘要:概述在編程中,經(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)文章

  • (轉(zhuǎn))php json_decode解析失敗及錯(cuò)誤處理

    摘要:看到一篇很好的文章,關(guān)于處理解析失敗的方法,寫的非常詳細(xì),特此裝載過來。再說,沒有錯(cuò)誤怎么會(huì)失敗呢如果是格式錯(cuò)誤,再低版本的都會(huì)告訴你,所以碰上第一個(gè)可能性就往非法字符串想如何處理中的非法字符根據(jù)的編碼范圍,是可以剔除掉非法字符的。 看到一篇很好的文章,關(guān)于處理json_decode解析失敗的方法,寫的非常詳細(xì),特此裝載過來。 一般情況下,獲取到一段json內(nèi)容,直接json_deco...

    KaltZK 評論0 收藏0
  • #yyds干貨盤點(diǎn)# 單元測試

    摘要:概念單元測試又稱模塊測試,是針對軟件設(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ì)說明書和源程序清單,...

    不知名網(wǎng)友 評論0 收藏0
  • 5處理Vue異常的方法

    摘要:最近突然意識到,我竟然從來沒有認(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)目。最近突然意識到,我竟然從來沒...

    Drinkey 評論0 收藏0
  • 上手并過渡到PHP7(4)——取代fatal error的engine exceptions

    摘要:上手并過渡到取代的泊學(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_...

    mylxsw 評論0 收藏0
  • HTML5 Geolocation學(xué)習(xí)

    摘要:如果應(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ī)、筆記本...

    xiyang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<