【问题标题】:Python pathlib error while trying to access AWS lambda environment file during runtime尝试在运行时访问 AWS lambda 环境文件时出现 Python pathlib 错误
【发布时间】:2022-01-20 18:24:01
【问题描述】:

我正在使用带有基于层的模块的 python 3.9 Lambda 函数。该模块需要提供 JSON 文件的绝对路径,用于在运行时读取/写入数据。访问很少发生。

我的想法是在 lambda 环境中创建 json 文件,我可以使用以下派生的路径很好地访问它: jsonPath = os.environ['LAMBDA_TASK_ROOT']+"/theFile.json"

但是该模块正在使用 pathlib,我无法克服以下错误:

Response
{
  "errorMessage": "expected str, bytes or os.PathLike object, not NoneType",
  "errorType": "TypeError",
  "requestId": "dd6f717c-1ede-4906-92cd-de52a441a416",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 35, in lambda_handler\n    tdSession = TDClient(client_id,redirect_uri,jsonPath)\n",
    "  File \"/opt/python/td/client.py\", line 116, in __init__\n    self.credentials_path = pathlib.Path(credentials_path)\n",
    "  File \"/var/lang/lib/python3.9/pathlib.py\", line 1082, in __new__\n    self = cls._from_parts(args, init=False)\n",
    "  File \"/var/lang/lib/python3.9/pathlib.py\", line 707, in _from_parts\n    drv, root, parts = self._parse_args(args)\n",
    "  File \"/var/lang/lib/python3.9/pathlib.py\", line 691, in _parse_args\n    a = os.fspath(a)\n"
  ]
}

似乎有些路径参数丢失了,导致 os.fspath() 抛出错误。我的主要猜测是这是由于提供了相对路径。

关于如何完成这项工作的任何想法?或者这是我需要使用 EFS 的情况?

谢谢!

更新:

在本地尝试过,使用相对路径和绝对路径都遇到了同样的问题。现在猜测这可能是由于路径信息是如何从模块传递到 pathlib 的。要去探索这个。

更新(已回答):

找到问题并在下面回答。

【问题讨论】:

    标签: python-3.x aws-lambda pathlib python-os


    【解决方案1】:

    包文档不正确。

    文档中描述的类的初始化参数未能在我遇到问题的 filePath 之前包含一个参数,这意味着在实际代码中,filePath 参数没有被传递,并且保持它的默认值 None。

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 2016-10-22
      • 1970-01-01
      • 2018-01-25
      • 2021-06-10
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多