尽管您不能覆盖 sys.excepthook,但您可以执行以下操作:
为了提供一点上下文,我组织了类似于此处介绍的代码结构:https ://code.luasoftware.com/tutorials/google-cloud-functions/structure-for-google-cloud-functions-development-and-拆分多个文件/
Google 将您的函数入口点函数存储在一个名为X_GOOGLE_ENTRY_POINT
. 您使用 Python 语言功能来覆盖此函数并将其包装为类似于“装饰器”,基本上将其包装在 try/except 块周围,然后您可以在那里运行您想要的任何代码。我尝试使用sys.modules[\__name__]
但它没有用,所以我去了locals()
.
我在 test_logging.py 中定义了功能代码
from app.functions.test_logging import *
导入后我执行以下操作
fn = os.getenv('X_GOOGLE_ENTRY_POINT')
lcl = locals()
def decorate(fn):
def run(*args, **kwargs):
try:
fn(*args, **kwargs)
except Exception as e:
'''Do whatever you want to do here'''
return run
lcl[fn] = decorate(lcl[fn])
这很 hackish,但它对我有用,而且特别有用,因为我将代码库保存在函数文件夹中,我基本上不需要接触 main.py,这使得它非常灵活。如果您想让 GCP 知道它已失败并可能重新运行,您可以在处理异常后重新引发错误