【问题标题】:Key Error when deploying Flask App to heroku将 Flask App 部署到 heroku 时出现关键错误
【发布时间】:2021-07-20 15:59:28
【问题描述】:

我将我的应用程序部署到 Heroku,它向我显示了关于“项目”的“keyError”。我的代码在本地运行得很好,但不会在 Heroku 上运行。有人知道我该如何解决吗? 非常感谢!

我的代码:

def getbooktitle():
    if request.method == "POST":
        file = request.files['image']
        img = Image.open(file.stream)
        booktitle = pytesseract.image_to_string(img)

        api_key = "myapikey"
        url = f"https://www.googleapis.com/books/v1/volumes?q={booktitle}&key={api_key}"
        response = requests.get(url)
        json_response = response.json()
        volume_info = json_response['items'][0]['volumeInfo']
        title = volume_info.get('title')
        author = volume_info.get('authors')
        imageslink = volume_info['imageLinks']
        smallimage = imageslink['smallThumbnail']
        return jsonify({"books": [{'title': title, 'author': author[0], 'imageLink': smallimage}]})

查看日志:

2021-07-20T15:50:16.826905+00:00 app[web.1]: [2021-07-20 15:50:16,823] ERROR in app: Exception on /getbook [POST]
2021-07-20T15:50:16.826914+00:00 app[web.1]: Traceback (most recent call last):
2021-07-20T15:50:16.826915+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app
2021-07-20T15:50:16.826915+00:00 app[web.1]:     response = self.full_dispatch_request()
2021-07-20T15:50:16.826917+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request
2021-07-20T15:50:16.826917+00:00 app[web.1]:     rv = self.handle_user_exception(e)
2021-07-20T15:50:16.826918+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
2021-07-20T15:50:16.826918+00:00 app[web.1]:     rv = self.dispatch_request()
2021-07-20T15:50:16.826919+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
2021-07-20T15:50:16.826919+00:00 app[web.1]:     return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
2021-07-20T15:50:16.826920+00:00 app[web.1]:   File "/app/app.py", line 21, in getbooktitle
2021-07-20T15:50:16.826921+00:00 app[web.1]:     volume_info = json_response["items"][0]["volumeInfo"]
2021-07-20T15:50:16.826922+00:00 app[web.1]: KeyError: 'items'

【问题讨论】:

  • 这个问题与Flask或Heroku无关,它是一个更一般的Web开发或编程问题。线索在错误消息中——json_response 字典中没有关键的“项目”。原因可能是找不到书名或书名无效,或者您的 API 密钥错误。
  • @KarlSutt 谢谢卡尔!我正在使用的 API 密钥与我正在使用的相同,当我在本地测试应用程序时,它工作得非常好。我在谷歌云平台上仔细检查过,但都是一样的,没有限制。我还尝试了带有书名和我的 API 密钥的链接,它显示了“项目”。
  • 您可以在访问密钥之前打印出响应以查看其中的内容以及是否有任何其他有用的线索。

标签: flask heroku google-api


【解决方案1】:

你在 Heroku 中使用配置变量吗?

如果是,请确保您的配置变量中没有连字符。我有同样的问题..应用程序在本地运行得很好,但在 Heroku 上它会带回一个 KeyError。我被难住了好几个小时。一旦我将连字符更改为下划线,它就可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2014-11-09
    • 2021-03-27
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多