我最近决定,我想开始学习更多有关真实Python及其相关应用程序的知识。为此,我尝试编写一个简单的Discord机器人。但是,我遇到的问题不同于在任何平台上看到的任何其他问题-包括以下问题:can't find '__main__' module in 'bot'
。我在命令提示符中运行python bot
时收到此错误。现在,我假设我确实应该运行python bot
而不是python bot.py
,因为.py仅表示bot是一个Python文件。我之所以这么认为是因为,当我运行python bot.py
时,会收到以下消息:python: can't open file 'bot.py': [Errno 2] No such file or directory
。这是bot.py:
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(client.user(), "has connected to Discord!")
client.run(TOKEN)
此外,当我在Python Shell中运行bot.py时,还会收到以下消息:
Traceback (most recent call last):
File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\bot.py", line 17, in <module>
client.run(TOKEN)
File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 640, in run
return future.result()
File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 621, in runner
await self.start(*args, **kwargs)
File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 584, in start
await self.login(*args, bot=bot)
File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 442, in login
await self.http.static_login(token.strip(), bot=bot)
AttributeError: 'NoneType' object has no attribute 'strip'
而且,我不确定代码中的哪一个(甚至哪一个)已解决该问题,但这是.env.txt:
#.env
DISCORD_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
好的,我认为这涵盖了所有内容。如果有人需要澄清任何部分,我很乐意提供。预先感谢。
答案 0 :(得分:0)
现在,我认为我确实应该运行python bot而不是python bot.py,因为.py仅表示bot是一个Python文件
除非正在运行模块,否则在运行python文件时应始终使用“ .py”结尾。 “ python bot.py”是正确的。
在'bot'中找不到'__main__'模块
如果您直接调用模块,则需要在模块中有一个名为“ __main__.py”的python文件,该文件可以执行您希望模块执行的操作。
AttributeError:'NoneType'对象没有属性'strip'
因此TOKEN返回了程序未检查的“ None”,因此在尝试执行strip方法时无法执行,因为“ None”对象没有方法“ strip”。
答案 1 :(得分:0)
您应该在load_dotenv
内传递.env文件的路径。因为目前您的TOKEN
返回None
import os
import discord
from dotenv import load_dotenv
load_dotenv("myenvfile.env") # <-- you can enter your .env file like so
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
@client.event
async def on_ready():
print(client.user(), "has connected to Discord!")
client.run(TOKEN)
.env
DISCORD_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"