2016-12-27 30 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

謝謝,你解決了我的問題 –

相關問題