Python.PY代码中print()中不存在的变量

Python.PY代码中print()中不存在的变量,python,compiler-errors,discord.py,Python,Compiler Errors,Discord.py,因此,我尝试创建一个discord机器人,并编写了以下代码: import os import discord from dotenv import load_dotenv load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') GUILD = os.getenv('DISCORD_GUILD') client = discord.Client() @client.event async def on_ready(): for guil

因此,我尝试创建一个discord机器人,并编写了以下代码:

import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()


@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )

client.run(TOKEN)
然后VSCode向我展示了以下内容:

    f'{client.user} is connected to the following guild:\n'
UnboundLocalError: local variable 'guild' referenced before assignment

Idk在哪里找到了“帮会”变量,请帮我删除这个错误

有点大的评论空间

我把你的密码改了一点。因为厄罗是未知的。此代码至少可以帮助您识别错误 导入操作系统

import discord
import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()


@client.event
async def on_ready():
    print(client.guilds) # try to print number of child of client.guilds. I think they are Zero
    for guild in client.guilds:
        if guild.name == GUILD:
            break # This break does not gurantee guild is initalized
    # safety check to make code showing proper error
    if guild is not None:
        print(dir(guild))
        print(
            f'{client.user} is connected to the following guild:\n'
            f'{guild.name}(id: {guild.id})'
        )

client.run(TOKEN)

问题很可能是,行会可能没有定义。例如:

这项工作:

[0,1]中我的变量的
:
通过
打印(my_var)
这会产生一个名称错误,因为从未定义my_var

[]中我的变量的
:
通过
打印(my_var)

您需要为guild设置一个默认值(您可以将
guild=None
放在for循环的上方,或者将print语句放在for循环的内部来实现这一点。

VScode可能无法显示错误,因为它是一个字符串,分为两行,但随后来自
guild
。如果
client.guilds
为空,则您没有
guild
定义我认为这是因为您希望将
guild
置于for循环之外,请尝试将
print()
函数置于
If guild.name==guild
之前,然后将两个字符串合并为一个字符串。:)您删除了操作系统的导入,这将导致一个新的错误,而且问题似乎是没有定义帮会,因为帮会应该通过client.guilds填充一个循环。什么是client.guilds.guilds是空的,但是可以使用?
“”.join(对于client.guilds中的帮会,f'{guild.name}(id:{guild.id})\n'
如果没有公会,此字段将为空。您只需将其添加到字符串的第一部分。我猜client.guilds是服务器列表?这并不能解决实际问题。如果帮会未定义,您可以检查
如果帮会不是None
我会试试这个。UPD:不,同样的错误。。