我尝试创建一个discord bot,当我尝试使用load_dotenv()加载.env时,它不起作用,因为它说
Traceback (most recent call last):
File "/home/fanjin/Documents/Python Projects/Discord Bot/bot.py", line 15, in <module>
client.run(TOKEN)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 708, in run
return future.result()
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 687, in runner
await self.start(*args, **kwargs)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 650, in start
await self.login(*args, bot=bot)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 499, in login
await self.http.static_login(token.strip(), bot=bot)
AttributeError: 'NoneType' object has no attribute 'strip
下面是我的机器人代码:
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
client.run(TOKEN)
以及保存.env文件:(假令牌)
# .env
DISCORD_TOKEN={Bzc0NjfUH8fEWFjg2NDMyMjY2.X6coqw.JyiOR89JIH7fFFoyOMufK_1A}
这两个文件都在同一个目录中,我甚至尝试使用以下命令显式指定.env的路径
env_path = Path('path/to/file') / '.env'
load_dotenv(dotenv_path=env_path)
但那也不管用
5条答案
按热度按时间zi8p0yeb1#
我也遇到过类似的问题,并找到了以下三种可能的解决方案/原因:
1.检查.env文件中的语法是否正确,原始文档将是最好的源代码-Python Dotenv(示例如下)
1.对我有效的解决方案是使用
find_dotenv()
而不是load_dotenv()
中的文件路径,原因是load_dotenv()
不能正确加载.env文件。find_dotenv()
是一个自动查找.env文件的函数,如果它与您的代码文件位于同一个文件夹中。1.您可以使用
sys.path[1]
将搜索限制在当前项目文件夹中,以确保您正在阅读所需的文件。因为,我把我的
.env
文件的另一个子文件夹config
内,然后我必须提供完整的路径load_dotenv()
,使它工作。[已编辑]
2exbekwf2#
我在ubuntu 20.04和python-dotenv 0.15.0上加载我的环境配置时也遇到了同样的错误。我可以使用python解释器来纠正这个错误,它会注销在加载环境时遇到的任何错误。每当环境变量加载成功时,load_dotenv()都会返回
True
。对我来说,是我的配置文件的一个问题(语法错误)破坏了加载过程。我所需要做的就是转到我的环境变量配置文件并修复损坏的语法。
尝试在加载环境变量(从python的解释器)时传递
verbose=True
,以从load_dotenv获取更多信息。wbgh16ku3#
您需要输入完整路径。
用途
os.path.expanduser('~/Documents/MY_PROJECT/.env')
load_dotenv('/home/MY_USER/Documents/MY_PROJECT/.env')
它会起作用的。
或者在代码编辑器中将当前工作目录更改为.“env”文件所在的位置(应该是项目文件夹)。
或者在代码编辑器的菜单中打开项目文件夹,这应该会使项目文件夹成为当前工作目录。
在Linux上,您还可以转到终端中的项目文件夹,并从那里启动代码编辑器,例如键入
codium
或在命令提示符中使用的任何内容。TL:DR
引用其他答案
由于我将.env文件移到了另一个子文件夹config中,因此我必须提供load_dotenv()的完整路径才能使其正常工作。
这给了我检查工作目录的想法。
当前工作目录
os.getcwd()
给了我一个更靠上的文件夹。然后我把“.env”文件复制到那个工作目录中,它就工作了。改变工作目录取决于你的代码编辑器。我使用codium,它是vscode的开源版本,那么你可以遵循例如Python in VSCode: Set working directory to python file's path everytime
完整路径
您也可以输入完整路径。
有趣的是,我在来这里之前已经检查过了,但是我复制了你从终端获得的路径,从
'~/Documents/MY_PROJECT
开始,它没有找到文件,但也没有发出警报,任何尝试的环境变量都是空的-只是因为“.env”文件本身从未被读取。m0rkklqb4#
所以这花了我一段时间。我的load_dotenv()返回True。
我在一些记录后有逗号,这是不正确的。
一旦我去掉了逗号,变量就开始工作了。
9lowa7mx5#
我讷讷:
variable = '变数'
将其更改为:
variable=变量
已修复此问题.(删除空格,删除“”)