可能原因
入口函数定义错误,例如您在Python事件函数的入口函数中,创建了HTTP触发器。
解决方案
请参考以下不同的函数类型定义您的入口函数:
Python事件函数的入口函数定义。详细信息,请参见环境说明。
def handler(event, context): return 'hello world'
Python HTTP函数的入口函数定义。详细信息,请参见请求处理程序(Handler)。
def handler(environ, start_response): context = environ['fc.context'] # get request_body try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except (ValueError): request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) print('request_body: {}'.format(request_body)) # do something here status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) # return value must be iterable return [b"Hello world!\n"]
可能原因
HTTP函数逻辑错误,例如忘记调用start_response
参数,如下所示HTTP函数的示例代码中就忘记调用此参数。
def handler(environ, start_response):
# do something here
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
# forget to call start_response
# start_response(status, response_headers)
# return value must be iterable
return [b"Hello world!\n"]
解决方案
请参考Python HTTP函数的函数入口及部署框架修改您的HTTP函数逻辑。详细信息,请参见请求处理程序(Handler)。
可能原因
在Python3的运行环境中,您将返回值设置为不可迭代的Bytes了。
解决方案
请将返回值设置为可迭代的Bytes,例如[json.dumps(result).encode()]
。
您可以参考以下示例修改函数代码:
import json
def handler(environ, start_response):
# do something here
result = {"code": "OK"}
status = '200 OK'
response_headers = [('Content-type', 'application/json')]
start_response(status, response_headers)
# return value must be iterable
return [json.dumps(result).encode()]