azure 如何在返回API响应的同时使程序失败?

ndh0cuux  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(77)

我有一个Azure函数作为API端点,如果出现异常,我需要一种既向用户返回500错误,又用错误代码退出程序的方法。

async def main(req: func.HttpRequest) -> func.HttpResponse:
try:
    <do the stuff>

    logger.info(f"I'm causing an exception! {5 / 0}")

    return func.HttpResponse(
        "Data sent successfuly",
        status_code=200
    )
except Exception:
    logger.exception("Hit an exception at the top level")
    return func.HttpResponse(
        "API - Hit an exception at the top level >_<",
        status_code=500
    )
    sys.exit(1)   <---------------- This line is inaccessible

字符串
因为我使用return来发送API响应,所以它也退出此函数。问题是,使用Azure Functions,我无法访问更高级别的调用者,如果我不使用sys.exit(1),即使在崩溃时,函数也会报告它成功运行。

yacmzcpb

yacmzcpb1#

如何在返回API响应的同时使程序失败?
在Azure函数中,你可以同时做这两件事,但不能同时做,你甚至可以得到失败或API响应,API响应出现在Azure函数的末尾,而不是中间或开始,如果你得到API响应本身意味着函数成功执行。

import logging
import azure.functions as func

class RithwikCustomException(Exception):
    pass

async def main(req: func.HttpRequest) -> func.HttpResponse:
    try:
        # <do the stuff to get data>

        # Generating a custom exception
        raise RithwikCustomException("Something went wrong Rithwik, Please Check!")

        return func.HttpResponse(
            "Data sent successfully Rithwik",
            status_code=200
        )
    except RithwikCustomException as ex1:
        return func.HttpResponse(
            f"API - Hit an exception Rithwik: {str(ex1)}",
            status_code=500
        )
    except Exception:
        return func.HttpResponse(
            "API - Hit an exception at the top level Man >_<",
            status_code=500
        )

字符串
输出量:


的数据



函数的最后一个可执行语句是return,在return之前不要做任何事情,因为它不会执行或识别为命令。

相关问题