首页 > 解决方案 > Azure Functions HTTP 触发器:如何将异常从 python 工作日志返回给 API 调用者

问题描述

我是 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)

标签: python-3.xazureazure-functionsazure-cosmosdbazure-cosmosdb-sqlapi

解决方案


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

我相信这个问题与你在 function.json 文件中定义的分区键有关。

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


推荐阅读