当我运行Python语言的函数时,遇到报错NoneType object has no attribute split怎么办?

可能原因

入口函数定义错误,例如您在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()]