资讯专栏INFORMATION COLUMN

5-错误处理

MonoLog / 1779人阅读

摘要:概述在编程中,经常需要处理出现的错误,比如说编程中出现的异常,网络超时等等,有的错误是可以估计到的,比如说肯定是错误的除法,一些是估计不到的。一般来说,会在程序中创建一个类,用来专门的处理。

概述

在编程中,经常需要处理出现的错误,比如说编程中出现的异常,网络超时等等,有的错误是可以估计到的,比如说 0 / 1 肯定是错误的除法,一些是估计不到的。 但是不能因为有错误,整个程序就停止了,程序的鲁棒性就体现在面对错误,能够处理错误

错误处理语句
try:
    pass
except Exception as e:
    print(e)

上面的程序会把导致程序出错的原因,一句话描述出来,这样有时候不免显得不够清晰,我们可以使用下面的代码,显示出错的堆栈

try:
    s = 0 / 1  
except Exception as e:
    print(traceback.from_exec())
自建异常对象

python的所有内建的异常,全部继承于BaseException 这个类,官方文档看到,自建异常对象推荐是创建一个Error 类, Error 类继承 Exception 类,然后具体的异常对象在继承这个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

知道了异常和如何处理异常,在调试的过程中是十分方便的,但是如果程序已经上线了,那个时候出了问题,要调查就需要借助于log 这个东西了。
一般来说,会在程序中创建一个logger 类,用来专门的 log 处理。 可以定义好一个适合自己的 logger 类,需要的时候,直接拿来用即可.

# 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)
        # 这个必须设置,否则默认不显示debug或者info的信息,也就是说这个的配置会覆盖掉cmd和file的配置
        self.logger.setLevel(logging.DEBUG)

        # 设置格式化
        _fmt = logging.Formatter("[%(asctime)s] [%(levelname)s] %(name)s : %(message)s", "%Y-%m-%d %H:%M:%S")
        # 设置命令行
        sh = logging.StreamHandler()
        sh.setFormatter(_fmt)
        sh.setLevel(clevel)
        # 设置文件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("一个debug信息")
    logyyx.info("一个info信息")
    logyyx.warn("一个warning信息")
    logyyx.error("一个error信息")
    logyyx.critlal("一个致命critical信息")

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42950.html

相关文章

  • (转)php json_decode解析失败及错误处理

    摘要:看到一篇很好的文章,关于处理解析失败的方法,写的非常详细,特此装载过来。再说,没有错误怎么会失败呢如果是格式错误,再低版本的都会告诉你,所以碰上第一个可能性就往非法字符串想如何处理中的非法字符根据的编码范围,是可以剔除掉非法字符的。 看到一篇很好的文章,关于处理json_decode解析失败的方法,写的非常详细,特此装载过来。 一般情况下,获取到一段json内容,直接json_deco...

    KaltZK 评论0 收藏0
  • #yyds干货盘点# 单元测试

    摘要:概念单元测试又称模块测试,是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。多个模块可以平行地独立进行单元测试。单元测试的内容在单元测试中进行的测试工作需要在以下五个方面对所测模块进行检查。 单元测试一直都是考试的热点,近几年在上午题中出现的频率很高。在进行单元测试时,测试人员需要依据详细设计说明书和源程序清单,...

    不知名网友 评论0 收藏0
  • 5处理Vue异常的方法

    摘要:最近突然意识到,我竟然从来没有认真去处理异常。第三种执行一个会抛出异常的方法这个错误在控制台也和常规报错。这种是比较常见的错误。它是一个全局的异常处理函数,可以抓取所有的异常。 原文: Handling Errors in Vue.js 译者: Fundebug 本文采用意译,版权归原作者所有 去年一整年,我都在使用最爱的—Vue.js— 来做项目。最近突然意识到,我竟然从来没...

    Drinkey 评论0 收藏0
  • 上手并过渡到PHP7(4)——取代fatal error的engine exceptions

    摘要:上手并过渡到取代的泊学原文链接泊学代码秀视频自从以来,的错误处理几乎就是一成不变的。在中,这个尴尬的现状,终于被彻底改变了。无论是还是传统的,只要类型不匹配约束的时候,就会导致异常。 上手并过渡到PHP7 取代fatal error的engine exceptions 泊学原文链接泊学代码秀视频 自从PHP 4以来,PHP的错误处理几乎就是一成不变的。只不过在PHP 5.0里添加了E_...

    mylxsw 评论0 收藏0
  • HTML5 Geolocation学习

    摘要:如果应用程序不再需要接受有关用户的持续位置更新,则只需调用函数,如下所示表示一个唯一的监视请求以便将来取消监视。 GeolocationAPI学习,我写的挺枯燥的,直接跳到最后看示例。 5.1 位置信息 HTML5 Geolocation API的使用方法相当简单。请求一个位置信息,如果用户同意,浏览器就会返回位置信息,该位置信息是通过支持HTML5地理定位功能的底层设备(手机、笔记本...

    xiyang 评论0 收藏0

发表评论

0条评论

MonoLog

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<