• python 实现简单的ExceptionCallHandler装饰器


    Python的functools模块, 提供了3个有趣函数, partial, update_wrapper 和wraps 。

    partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象。

    update_wrapper函数,把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去。

    wraps函数,对update_wrapper更进一步封装。

    可以利用wraps函数,实现简单的方法拦截机制,来实现自己的ExceptionCallHandler,

    具体实现:

    #-*- coding: UTF-8 -*-
    #-------------------------------------------------------------------------------
    # Name:        模块2
    # Purpose:
    #
    # Author:      ankier
    #
    # Created:     22-12-2012
    # Copyright:   (c) Ankier 2012
    # Licence:     <2012~2020>
    #-------------------------------------------------------------------------------
    import time
    
    from functools import wraps
    
    _Cache ={}
    
    def ExceptionCallHandler():
        def _ExceptionCallHandler(fun):
            @wraps(fun)
            def wrap(args, kw):
                glos = fun.func_globals
                package = glos['__package__']
                model = glos['__name__']
                methodName = fun.func_name
                
                result = None
                try:
                
                    result = fun(args, kw)               
                
                except Exception, e :            
                
                    print 'package:',package,' , model:', model, ' , methodName:',methodName,'. ', e
                
                return result 
            return wrap
        return _ExceptionCallHandler
    #-*- coding: UTF-8 -*-
    
    import time
    from exceptionCallHandler import ExceptionCallHandler
    
    @ExceptionCallHandler()
    def Sum(xx , yy ):
        raise Exception("Exception error information!")    
        sum = xx + yy
        print '------sum----- '
        time.sleep(10)            
        return sum
    
    print Sum(4, 5)
    
    print Sum(4, 5)

    运行效果:

    package: None , model: mainFrame , methodName: Sum . Exception error information!
    package: None , model: mainFrame , methodName: Sum . Exception error information!

  • 相关阅读:
    Java基础--阻塞队列ArrayBlockingQueue
    Java基础--反射Reflection
    Java基础--对象克隆
    Java基础--HashCode
    Java基础--序列化Serializable
    OpenCV 绘制图像直方图
    PHP isset, array_key_exists配合使用, 并解决效率问题
    安装XDEBUG步骤及问题
    设计模式例子
    适配器模式例子
  • 原文地址:https://www.cnblogs.com/ankier/p/2829118.html
Copyright © 2020-2023  润新知