djangoでエラー処理デコレータを作成しようとしています。例外が発生した場合にデコレータでロギングが発生し、例外が修飾された関数に返され、httpというエラーが送信されます応答。Djangoのデコレータによる例外の処理
しかし、これをやろうとすると、デコレータの例外が戻された後に、デコレータ機能にExceptブロックを追加すると、デコレータの例外ブロックだけが実行され、デコレータのexceptブロックは次のようになります。未実行のままにする。
MyDecorator.py
def log_error(message):
def decorator(target_function):
@functools.wraps(target_function)
def wrapper(*args, **kwargs):
try:
return target_function(*args, **kwargs)
except Exception as e:
print('except block of the decorator')
exceptiontype, exc_obj, exc_tb = sys.exc_info()
filename = traceback.extract_tb(exc_tb)[-2][0]
linenumber = traceback.extract_tb(exc_tb)[-2][1]
mylogger(message=str(e),description='Related to Registration',fileName=filename,lineNumber=linenumber, exceptionType = type(e).__name__)
raise
return wrapper
return decorator
装飾機能
@log_error('message')
def action(self, serializer):
try:
..................
..................
..................
..................
return Response(status=status.HTTP_200_OK, data={
"message":'link sent successfully'})
except Exception as e:
print('except block of the decorated function')
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR,
data={"message" : 'error sending link'})
これは、装飾された機能ブロックを除い線
印刷さ
デコレータ
のブロックを除く
なくライン
私が飾ら機能以外からブロックを削除する場合は、デコレータのを除いてブロックが実行きています。
この例外トレースがデコレータでどのように処理されるかを理解する助けとなります。