すべてのプロダクト
Search
ドキュメントセンター

Function Compute:Pythonで関数を呼び出すときに次のエラーが発生した場合はどうすればよいですか。NoneTypeオブジェクトには属性分割がありません。

最終更新日:Sep 11, 2024

原因

関数ハンドラーが正しく定義されていません。 たとえば、Pythonイベント関数の関数ハンドラーにはHTTPトリガーが含まれています。

解決策

次の関数型に基づいて関数ハンドラーを定義します。

  • Pythonイベント関数。 詳細については、「概要」をご参照ください。

    def handler(event, context):
            return 'hello world'

    を返す

  • Python HTTP関数。 詳細については、「Python HTTP関数」をご参照ください。

    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パラメーターは関数で呼び出されません。 以下にコードの例を示します。

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関数のロジックを変更します。 詳細については、「Python HTTP関数」をご参照ください。

原因

返される値は、Python 3ランタイム環境では反復できないバイトに設定されます。

解決策

戻り値をiterableバイトに設定します。 例: [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()]