Python 如何捕捉金字塔中任何地方发生的操作错误+;炼金术?

Python 如何捕捉金字塔中任何地方发生的操作错误+;炼金术?,python,postgresql,exception,sqlalchemy,pyramid,Python,Postgresql,Exception,Sqlalchemy,Pyramid,我有一个典型的金字塔+SQLAlchemy+Postgres应用程序。在压力测试中或在异常负载时刻,以及PG中的低max_连接设置时,可能会引发操作异常: OperationalError: (psycopg2.OperationalError) FATAL: sorry, too many clients already 现在,显然我不想在任何地方这样做: 是否有某种方法可以“全局”捕获此异常以正确处理 我的应用程序以典型的金字塔方式使用ZopeTransactionExtension:

我有一个典型的金字塔+SQLAlchemy+Postgres应用程序。在压力测试中或在异常负载时刻,以及PG中的低
max_连接
设置时,可能会引发
操作异常

OperationalError: (psycopg2.OperationalError) FATAL:  sorry, too many clients already
现在,显然我不想在任何地方这样做:

是否有某种方法可以“全局”捕获此异常以正确处理

我的应用程序以典型的金字塔方式使用ZopeTransactionExtension:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

我成功地开发了一种可以做到这一点的tween(示例):

奇怪的是,在
development.ini
中,除了显式的tween排序外,什么都不起作用(对
config.add\tween
调用的
over=
under=
调优似乎都不起作用):


我成功地开发了一种可以做到这一点的tween(示例):

奇怪的是,在
development.ini
中,除了显式的tween排序外,什么都不起作用(对
config.add\tween
调用的
over=
under=
调优似乎都不起作用):

可能会搔痒,或创建一个自定义。可能会搔痒,或创建一个自定义。
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
def catch_pg_exc_tween_factory(handler, registry):
    def catch_pg_exc_tween_clos(request):
        response = None
        try:
            response = handler(request)
        except Exception as e:
            log.error('\n\n\n +++ problem: %s', e)
        return response
    return catch_pg_exc_tween_clos
pyramid.tweens = pyramid_debugtoolbar.toolbar_tween_factory
                 pyramid.tweens.excview_tween_factory
                 pyramid_tm.tm_tween_factory
                 mypkg.util.tweens.catch_pg_exc_tween_factory