2016-12-27 65 views
1

我想用decorator listen execpt,但是这个异常不会显示在function_listen中。 我希望它可以听,但是Python的似乎未能如愿如何使用装饰器实现listen除Python 3.6以外?

def function_listen(func): 
    try: 
     def wapper(*args,**kwargs): 
      return func(args,kwargs) 
    except Exception: 
     print(func.__name__+"ERROR") 

@function_listen 
def test(): 
    print(1/0) 
if __name__ == '__main__': 
    test() 

C:\ Python的\ Python36 \ python36.exe d:/MyCode/py/a.py

回溯(最近最后调用):

文件 “d:/MyCode/py/a.py”,第12行,在

测试()

类型错误: 'NoneType' 对象不是可调用

处理完成退出代码1

回答

2

装饰者应该返回一个函数,您的返回None。您还用错误的参数调用func

def function_listen(func): 
    def wrapper(*args, **kwargs): 
     try: 
      return func(*args, **kwargs) 
     except Exception: 
      print(func.__name__ + "ERROR") 
    return wrapper 


@function_listen 
def test(): 
    print(1/0) 

if __name__ == '__main__': 
    test() 

# testERROR 
+0

谢谢,你解决了我的问题 –