我使用pynic框架来处理我的API端点,但我想这与Flask或Django的逻辑相同。
我有几个端点,我想知道是否还有在同一个地方处理所有异常。
例如:
class Pnorm(Handler):
def post(self):
logger = logging.getLogger(constants.loggerName)
template_exception = "Exception {0} in class {1} ({2})."
try:
myJson = DoThings()
return myJson
except HTTP_400 as e:
logger.critical(message)
raise e
except Exception as e:
# unknown exception raise 500
logger.critical(message)
raise HTTP_500(message)
无论如何,我可以让我的所有端点以相同的方式处理异常,或者我是否需要重复我的"异常块"在每一点结束? (我不是仅仅在同一个班级,而是通过该项目。)
干杯, 于连
编辑: 我的主要课程:
class app(WSGI):
DataStructureHelper.set_dsh()
setup_logging.setup_logging(logger_name=constants.loggerName, console_level=logging.INFO)
routes = [
('/allocator', Allocator()),
('/data/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)', InstrumentData()),
('/pnorm', Pnorm()),
('/portfolios')
]
答案 0 :(得分:1)
我认为正确的方法是装饰者,因为它完全符合需求。以下是工作代码w.r.t flask。
需要注意的是,您需要将控件从装饰器返回给处理程序。
from functools import wraps
from flask import Flask, request
app = Flask(__name__)
def http_error_codes(method_name):
@wraps(method_name)
def handle_exceptions(*args):
try:
print("Inside the exceptions")
return method_name(*args)
except Exception as e:
print("HAHAHAHA")
raise e
return handle_exceptions
def do_the_login():
return "Testing is fun"
def show_the_login_form():
raise ValueError('The day is too frabjous.')
@app.route('/login', methods=['GET', 'POST'])
@http_error_codes
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
if __name__ == '__main__':
app.run()
希望这有帮助
答案 1 :(得分:0)
如果您想在一个地方处理所有异常,您可以保留一般的例外区块,如下所示。
MultiPart
这里的异常是General类,它将处理所有异常而不管错误。