Azure Functions HTTP 触发器:如何将异常从 python 工作日志返回给 API 调用者

Posted

技术标签:

【中文标题】Azure Functions HTTP 触发器:如何将异常从 python 工作日志返回给 API 调用者【英文标题】:Azure Functions HTTP Trigger : How to return exception from python worker log to the API caller 【发布时间】:2020-04-24 22:41:30 【问题描述】:

我是 Azure 函数的新手 希望知道如何将异常从 python 工作日志返回给 API 调用者。

在具有 COSMOS DB 绑定的 HTTP 触发器中,在触发对绑定的插入调用时,如果数据已经存在,则会失败并显示

“System.Private.CoreLib:执行函数时出现异常:Functions.insertEntityData。Microsoft.Azure.DocumentDB.Core:系统中已存在具有指定 ID 的实体。”

如何将此消息发送回最终用户?它不会在任何地方被捕获。

def main(req: func.HttpRequest, cosmosdata: func.Out[func.Document]) -> func.HttpResponse:
    try:
        message = ""
        logging.info('Python HTTP trigger function processed a request.')
        entity_name = req.route_params['entity']
        status_code = 500
        payload = req.get_json()
        if payload:
            try:
                logging.info(payload)
                resultant = cosmosdata.set(func.Document.from_dict(payload))
                logging.info(resultant)
                status_code = 200
                message = "Insert Successful to %s" % (entity_name)

            except Exception as e:
                return func.HttpResponse(str(e), status_code=500)
        else:
            status_code = 400
            message = "Please pass data in the POST Request"
    except Exception as e:
        return func.HttpResponse(str(e), status_code=500)

    return func.HttpResponse(message, status_code=500)

【问题讨论】:

您能否分享您的函数代码的 sn-p,以便我们了解您如何使用 Cosmos DB 绑定? Cosmos DB 输出绑定在保存项目时执行 Upsert 操作,而不是 Create。您的收藏是否启用了唯一密钥? 我已经输入了代码 sn-p.是的,唯一键已启用,这就是重新插入现有键值时提示错误的原因。我只是希望捕获错误并返回给用户 【参考方案1】:

try / catch 块不起作用,因为您正在使用与 Cosmos Db 的输出绑定,这是失败的那个。但是,它对我来说也很奇怪,因为默认情况下它执行和 Upsert 操作。

我认为问题与您在 function.json 文件中定义的分区键有关。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2#input---python-examples

【讨论】:

哦,我明白为什么它没有在 try catch 中被捕获。我没有在 function.json 中提供分区键。实际上这是我试图实现的行为。如果可能的话,我只想捕获从绑定中抛出的错误消息 我认为不是,因为它是由 azure 函数在内部处理的。

以上是关于Azure Functions HTTP 触发器:如何将异常从 python 工作日志返回给 API 调用者的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions:获取完整的请求 URL,包括 HTTP 触发器函数中的查询字符串

Azure Functions - 使用 Azure Functions 的表存储触发器

安装 Azure Functions 版本 1

Azure Functions - Python(Blob 触发器和绑定)

在 Azure Functions 中处理通用 404 响应

Azure Functions 的 Azure 队列触发器:配置最小轮询间隔