【问题标题】:flask how to not to show the error page when using @app.errorhandler(Exception) but continue with application flow烧瓶如何在使用 @app.errorhandler(Exception) 时不显示错误页面但继续应用程序流程
【发布时间】:2020-10-10 20:15:39
【问题描述】:

我有

@app.errorhandler(Exception)
def unhandled(error):
    print(error)
    etype, value, tb = sys.exc_info()
    print(traceback.print_exception(etype, value, tb))
    logger.error("Exception %s" % traceback.format_exc())
    logger.error("Exception %s" % traceback.print_exception(etype, value, tb))
    logger.info("Exception %s" % traceback.format_exc())
    logger.info("Exception %s" % traceback.print_exception(etype, value, tb))
    print(traceback.format_exc())
    return None

@app.route('/')
def index():
    logger.info("A %s- B: %s" % project_dict)   # raise exception 
    a = 1
    b = 2
    c = 3

问题是我没有用这个函数来打破调用处理程序@app.route('/') 的流程 只是打印到日志并继续

a = 1
 b = 2
 c = 3

【问题讨论】:

    标签: python flask error-handling


    【解决方案1】:

    您如何看待将可能的错误执行集成到 try-except 块中?

    # This code is never executed due to an error that occurs within 
    # the try-except block in the route `index`.
    @app.errorhandler(Exception)
    def unhandled(error):
        return make_response('Internal Server Error', 400)
    
    @app.route('/')
    def index():
        try:
           # Your code that may throw an error.
           raise Exception('something went wrong') # raise exception
        except Exception as exc: 
           # Handle exception here!
           pass 
        else:
           # This code is executes if no exception occurs.
           pass 
        finally:
           # This code is executed despite an exception.
           pass 
        # ...
    

    【讨论】:

    • 问题是我需要向服务器添加许多 try/catch 实际上到每个 app.route ,我有很多 .我想避免它,
    • 也许你可以把它包裹在一个装饰器中,但这取决于具体情况。我认为我的答案是解决您的问题的最佳和最通用的解决方案。样板代码不应该只是减少程序员的工作。或许你可以在 error_handler 执行后重定向回路由,但它会从头开始,并可能再次导致异常。这也是一种非常肮脏的方法。您熟悉上下文管理器吗?恐怕您的要求太笼统,无法给出更合适的答案。
    • 谢谢,但你的回答是我喜欢避免的标准方式
    • 我能给你的最后一个想法是集成中间件,实现自定义异常处理。我认为它不会保持您的应用程序的流程。我还要感谢你,并祝你在这个和你的进一步项目中取得成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2013-05-18
    • 2018-07-26
    相关资源
    最近更新 更多