Ошибка имени: имя » не определено проблема

#python #python-3.x #discord #discord.py

#python #python-3.x #Discord #discord.py

Вопрос:

я работаю над проектом python car, и я использовал функцию класса, чтобы я мог хранить много переменных в одной, но моя переменная класса не отправляется / не печатается, когда я пытаюсь это сказать NameError: name 'p1' is not defined . раньше у меня была другая проблема, которая привела меня к ошибке атрибута, я нашел проблему и исправил ееоказывается, я создал другую переменную с тем же именем.

Кстати, проблема заключается в переменной p1 и переменной p0

это код

 # IMPORT DISCORD.PY. ALLOWS ACCESS TO DISCORD'S API.
import discord

# IMPORT THE OS MODULE.
import os
import random
import time
# IMPORT COMMANDS FROM THE DISCORD.EXT MODULE.
from discord.ext import commands

BMW330i = 'https://automanager.blob.core.windows.net/wmphotos/037685/1844fa46dd334f7dae94afc9ca49aa8a/eaa2cae362_800.jpg'
HONDAs2000 = 'https://cimg3.ibsrv.net/cimg/www.s2ki.com/1600x900_85-1/343/1-Make-Improvements-408343.jpg'
NISSANsilvia ='https://static.carthrottle.com/workspace/uploads/posts/2015/12/9a8cd0a4a74fb73c29f564f6e33aa20f.jpg'

users = 0

class user:
    def __init__(self, name, car, car1,hp, hp1, carc, car1c, cari, car1i, money, daily):
        self.name = name
        self.car = car
        self.car1 = car1
        self.carc = carc
        self.car1c = car1c
        self.hp = hp
        self.hp1 = hp1
        self.money = money
        self.daily = daily
        self.cari = cari
        self.car1i = car1i

# CREATES A NEW BOT OBJECT WITH A SPECIFIED PREFIX. IT CAN BE WHATEVER YOU WANT IT TO BE.
bot = commands.Bot(command_prefix=";")

@bot.command()
async def test(message):
    p1 = user('imaad', 'd', 'd', 5, 5, 2, 2, 2, 2,2 ,2)
    await message.channel.send(p1.name)
@bot.command()
async def test1(message):
    global p1
    await message.channel.send(p1.name)

@bot.command()
async def reg(cxt):
    global users
    carstart = random.randint(1,3)
    if users == 0:
        await cxt.channel.send('Hey, '   cxt.author.name)
        if carstart == 1:
            p0 = user(str(cxt.author), '2003 BMW 330i', 'Empty', (235), 'Empty', (9), 'Empty',  BMW330i, 'Empty', (1000), (0))
        if carstart == 2:
            p0 = user(str(cxt.author), '2000 Honda S2000', 'Empty', (240), 'Empty', (9), 'Empty',  HONDAs2000, 'Empty', (1000), (0))
        if carstart == 3:
            p0 = user(str(cxt.author),  '2000 Nissan Silvia', 'Empty', (243), 'Empty', (9), 'Empty',  NISSANsilvia, 'Empty', (1000), (0))
        await cxt.channel.send('Welcome to Brooklyn, '   p0.name   ' lucky for you I managed to fetch a '   p0.car   ' with '   str(p0.hp)   'HP')
        await cxt.channel.send(p0.cari)
        await cxt.channel.send(p0.name)
        users = users   1
    else:
        await cxt.channel.send('k')
        




# EXECUTES THE BOT WITH THE SPECIFIED TOKEN. TOKEN HAS BEEN REMOVED AND USED JUST AS AN EXAMPLE.
bot.run('ODAxODA0NjY0ODM2MDYzMjQy.YAmAyA.snnqa9lOqYheREA0_PqH3GxK94E')
 

Спасибо

Комментарии:

1. test определяет локальную переменную p1 ; вы забыли global инструкцию? Вы также должны фактически вызвать функцию, чтобы определить глобальную переменную, поскольку вы не определяете p1 вне какой-либо функции.

2. Я отправил токен на аннулирование, повторно сгенерируйте свой токен на портале разработчика

3. Пожалуйста, убедитесь, что НЕ вставляете свой токен в код.

4. я только что изменил свои хэнки токенов discord за то, что они снова сказали мне, что я новичок в этом

Ответ №1:

Вы не определили p1 , ну, вы определили это, но в функции, так что это локальная переменная, а не глобальная

 # Don't define it in any command
p1 = user('imaad', 'd', 'd', 5, 5, 2, 2, 2, 2,2 ,2)

@bot.command()
async def test1(ctx):
    await ctx.send(p1.name)
 

Также я не понимаю вашей непоследовательности в одной команде, которую вы используете ctx в качестве аргумента, в других message . discord.py так не работает, он всегда передает commands.Context экземпляр в качестве первого аргумента, следовательно ctx .

Комментарии:

1. итак, что вы предлагаете мне изменить? (кстати, извините, я новичок в этом)

2. Не беспокойтесь, как я уже сказал в ответе, p1 это локальная переменная, а не глобальная, чтобы сделать ее глобальной, вы должны определить ее в глобальной области, как в коде, который я предоставил в своем ответе

3. теперь он говорит, что пользователь не определен

4. Вы должны определить его ПОСЛЕ создания user класса

5. кстати, можно ли изменить значения в классе? в команде