gpt4 book ai didi

python - Pyramid catch-all 友好的异常处理

转载 作者:太空狗 更新时间:2023-10-29 18:29:04 24 4
gpt4 key购买 nike

有没有一种方法可以在 Pyramid 网络应用程序中处理某种“包罗万象”的错误处理?我目前已经将异常日志记录到数据库(通过 http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html 上的文档),并且我会将消息返回到我的 View 中,以“友好”的方式处理所发生的事情。

但是有什么我可以实现的东西会显示某种通用的“糟糕,你遇到了一个问题,我们正在调查它”对于我没有明确捕捉到的任何其他东西,我可以使用上面的错误幕后处理程序将任何内容记录到数据库?或者,我应该在搜索中寻找什么样的东西?

谢谢,

编辑,因为我无法将其全部放入评论中:.谢谢,这似乎正是我要找的!

我遇到了一件事,我不知道它是否相关......

所以我像上面这样实现 SQL 记录器:

class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc(exc)
log = Log(
logger=record.__dict__['name'],
level=record.__dict__['levelname'],
trace=trace,
msg=record.__dict__['msg'],)
DBSession.add(log)
DBSession.flush()
#transaction.commit()

我不得不取消“transaction.commit()”调用,而是使用 .flush(),因为在使用事务时我遇到了 SQLAlchemy DetachedInstanceError 异常。我认为这是因为我正在玩一些将请求传递给辅助函数的游戏,而这似乎是它抛出的地方。所以它通过刷新 session 来工作。 Buuuut,如果我的异常 View 中有一个 log.error() 语句,如果实际抛出异常, View 会捕获它(太棒了!)但 View 中的日志语句不会提交。 Pyramid 中的调试日志显示它正在编写,但从未提交。

如果我将日志记录处理程序改回 transaction.commit,那么异常确实会被提交,但我又回到了原来的问题。我想我需要重新关注我在我的辅助函数中所做的事情,这首先导致了它,但我仍然在学习 SQLAlchemy。有时它可能有点奇怪。

最佳答案

您可以设置一个 exception view .例如:

@view_config(context=Exception)
def error_view(exc, request):
#log or do other stuff to exc...
return Response("Sorry there was an error")

关于python - Pyramid catch-all 友好的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com