使用 Python 运行时在 Azure Function 中接收 TypeError
Receiving TypeError in Azure Function with Python runtime
我无法理解这里的问题。
- HTTP 触发的 Azure 函数
- Python 运行时间
- 使用 HTTPS 在本地主机上进行测试(这里没问题)
- URL:
https://localhost:5007/api/BARCODE_API
- 目标:检查并验证 URL 的
type
参数
- 确保它存在,字符串等
这个有效:
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()
- 我也尝试将
req.params.get('type')
传递给 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 推荐的语法仍然会导致上述错误。
- 测试 1 显示失败,状态为 500(此问题的关键)
- Test2 显示它成功,状态为 200,然后失败,状态为 400(应该如此)
你的代码的问题是,如果你的 if req.params.get('type'):
评估为 false,那么不会引发异常并且你的函数 returns None
类型,这可能进一步导致提到的错误。
您可以在这里做几件事,
- Return 代码的其他部分中的测试失败状态代码。
- 如果条件不成立,则引发异常,然后
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
)
我无法理解这里的问题。
- HTTP 触发的 Azure 函数
- Python 运行时间
- 使用 HTTPS 在本地主机上进行测试(这里没问题)
- URL:
https://localhost:5007/api/BARCODE_API
- 目标:检查并验证 URL 的
type
参数- 确保它存在,字符串等
这个有效:
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()
- 我也尝试将
req.params.get('type')
传递给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 推荐的语法仍然会导致上述错误。
- 测试 1 显示失败,状态为 500(此问题的关键)
- Test2 显示它成功,状态为 200,然后失败,状态为 400(应该如此)
你的代码的问题是,如果你的 if req.params.get('type'):
评估为 false,那么不会引发异常并且你的函数 returns None
类型,这可能进一步导致提到的错误。
您可以在这里做几件事,
- Return 代码的其他部分中的测试失败状态代码。
- 如果条件不成立,则引发异常,然后
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
)