TypeError:期望str,得到NoneType - Python中Docker运行.env文件问题

0 投票
1 回答
30 浏览
提问于 2025-04-12 16:53

我有一个在本地(Windows)运行得很好的Python RAG脚本。

我理解的问题可能和在basic_rag.py中调用的.env文件有关。

os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

当我用Docker运行它时:

TypeError: str expected, not NoneType

这是文件结构:

APP
 chroma
 data
   text.pdf
 .env
 .gitignore
 basic_rag
 Dockerfile
 requirements.txt
 style

Dockerfile的代码是:

FROM python:3.8-slim

WORKDIR /rag-test

COPY ./data  ./data/
COPY ./basic_rag.py ./main.py

COPY ./requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8080

CMD ["python", "main.py"]

我对Docker还不太熟悉,找不到解决这个错误的方法。

谢谢大家的帮助。

1 个回答

0

你引用的那行代码其实没什么用,直接删掉就行了。

当环境变量没有被设置时,你会遇到问题。在这种情况下,os.getenv() 会返回 None。然后你试图把这个环境变量的值设为 None,但环境变量只能是字符串类型的值。

相反,如果环境变量已经设置好了,那么这一行代码就会把当前的值从环境中取出来,然后再把同样的值赋给这个环境变量。

所以,这一行代码唯一的作用就是在变量没有设置时抛出你看到的错误。如果是这种情况,你可以给出一个更清晰的错误提示:

if 'OPENAI_AI_KEY' not in os.environ:
  logging.critical('OPENAI_AI_KEY environment variable is not set')
  sys.exit(1)

撰写回答