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 - Python(Blob 触发器和绑定)