首页 > 解决方案 > Python烧瓶应用程序抛出NoneType object is not subscriptable错误

问题描述

我有一个 python (flask) 应用程序,当我使用以下命令卷曲它时:

要求:

curl -X POST "localhost:8090/endp/" -H "Content-Type: application/json" -d @jsonExample

JsonEquals 文件包括:

{"idSeq":"0123","timeStamp":"15032019","source":"US","destination":"GB","content":"parcel"}

响应:注意:它将返回两个新字段,这与预期的一样!

{
  "idSeq": "0123", 
  "routeInfo": "Good", 
  "content": "parcel", 
  "Notes": "Send fine "
}

但是当我使用命令运行我的 python unittest 时:python myTest.py

import os, sys

import json
import main
import unittest


class PublicTestCase(unittest.TestCase):
    def setUp(self):
        self.app = main.app.test_client()

    def my_first_test(self):
        headers = {
            'Content-Type': 'application/json'
        }
        data = {
            "idSeq": "0123",
            "timeStamp": "15032019",
            "source": "US",
            "destination": "GB",
            "content": "parcel"
        }

        response = self.app.post('/endp',
                                 headers=headers,
                                 data=json.dumps(data),
                                 follow_redirects=True)
        print("+++++++++++++++++++++++++++++++++++")
        print(data)
        print("+++++++++++++++++++++++++++++++++++")
        print(response)

        assert response.status_code == 200


if __name__ == '__main__':
    unittest.main()

然后我收到以下错误:

[2020-03-05 14:00:08,093] ERROR in app: Exception on /endp/ [POST]
Traceback (most recent call last):
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/ubuntu/venvs/inference/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "../src/main.py", line 72, in mypostmethod
    content = req_data['content']
TypeError: 'NoneType' object is not subscriptable
+++++++++++++++++++++++++++++++++++
{'idSeq': '0123', 'timeStamp': '15032019', 'source': 'US', 'destination': 'GB', 'content': 'parcel'}
+++++++++++++++++++++++++++++++++++
<Response streamed [500 INTERNAL SERVER ERROR]>
F
======================================================================
FAIL: my_first_test (__main__.PublicTestCase)

知道我做错了什么吗?如果之前有人问过类似的问题,我深表歉意,但我检查并找不到我正在使用 python FLASK 做什么的相关答案!

主文件

@app.route("/endp/", methods=['POST'])
def mypostmethod():
    req_data  = request.get_json()

    content = req_data['content']
    timeStamp = req_data['timeStamp']
    idSeq = req_data['idSeq']
    ...
    ...

标签: pythonjsoncurlflask

解决方案


推荐阅读