使用 Python 运行时在 Azure Function 中接收 TypeError

Receiving TypeError in Azure Function with Python runtime

我无法理解这里的问题。

这个有效:

import azure.functions as func
import logging

def main(req: func.HttpRequest) -> func.HttpResponse:
    
    if req.params.get('type'):
        return func.HttpResponse(
            "Test SUCCESS",
            status_code=200
        )
    else:
        return func.HttpResponse(
            "Test FAIL",
            status_code=400
        )

我不明白为什么这不起作用...

import azure.functions as func
import logging

def main(req: func.HttpRequest) -> func.HttpResponse: 

    def check_type():
        try:
            if req.params.get('type'):
                return func.HttpResponse(
                    "Test SUCCESS",
                    status_code=200
                )
        except:
            return func.HttpResponse(
                "Test FAIL",
                status_code=400
            )

    check_barcode = check_type()

错误

Exception: TypeError: unable to encode outgoing TypedData: unsupported type "<class 'azure.functions.http.HttpResponseConverter'>" for Python type "NoneType"

我发送 https://localhost:5007/api/BARCODE_API?type=ean13

时不明白为什么会这样

编辑 1: 使用@MohitC 推荐的语法仍然会导致上述错误。

你的代码的问题是,如果你的 if req.params.get('type'): 评估为 false,那么不会引发异常并且你的函数 returns None 类型,这可能进一步导致提到的错误。

您可以在这里做几件事,

  1. Return 代码的其他部分中的测试失败状态代码。
  2. 如果条件不成立,则引发异常,然后 except 部分将 return 您想要的。
    def check_type():
        try:
            if req.params.get('type'):
                return func.HttpResponse(
                    "Test SUCCESS",
                    status_code=200
                )
            else:
                return func.HttpResponse(
                    "Test FAIL",
                    status_code=400
                )
        except:
            return func.HttpResponse(
                "Test FAIL",
                status_code=400
            )

编辑:

根据 Gif 中优雅显示的 Azure API 架构,看起来您的主要功能必须 return 一些东西。您正在 check_barcode 中收集 HTTP 响应,而不是 returning 它。

试试下面的代码:

import azure.functions as func
import logging

def main(req: func.HttpRequest) -> func.HttpResponse: 

    def check_type():
        try:
            if req.params.get('type'):
                return True
            else:
                return False
        except:
            return False

    check_barcode = check_type()
    if check_barcode:
        return func.HttpResponse(
            "Test SUCCESS",
            status_code=200
        )
    else:
        return func.HttpResponse(
            "Test FAIL",
            status_code=400
        )