SourLemonn8 Ответов: 3

Неопределенные переменные, даже если они явно определены выше?


Очевидно, python думает, что я не определил переменные UserInput, message и HelpEmbed.

@client.event
async def on_message(message):
 UserInput=message.content.split(" ")
 
 if len(UserInput)==5:
  if UserInput[0]=="!tz" or str(610890196199800852) in UserInput[0]: 
    try: 
      UserTime1=UserInput[1].split(".")
      now=datetime.utcnow()
      Date1= datetime(now.year, now.month, now.day, int(UserTime1[0], int(UserTime1[1])))  
      UserTZ1=UserInput[2]
      UserTZ2=UserInput[4] 
      TZ1=getTZ1(Date1, UserTZ1, now)
      TZ2=getTZ1(Date1, UserTZ2, now)
      Date1=timezone(TZ1).localize(datetime(now.year, now.month, now.day, int(UserTime1[0]), int(UserTime1[1]))).astimezone(timezone(TZ2))
      await message.channel.send("```"+str((Date1))+"```")

    
    except: 
      await message.channel.send("Oops! Seems like the command syntax is wrong. Try again!")
      await message.channel.send(str(traceback.format_exc()))

#end time convert

@client.event
async def displayembed():
  HelpEmbed=discord.Embed(
    title="Help Panel",
    description="Test description",
    #colour=discord.Colour.white()
  )

if UserInput[0]=="!tz" and UserInput[1]=="help":
  await message.channel.send(embed=HelpEmbed)

#end help

def getTZ1(DateInput, User_aTZ1, now):
  for TZ1Time in TimeZones:
    ConvertedTime1=utc.localize(now).astimezone(timezone(TZ1Time))
    if ConvertedTime1.tzname() == User_aTZ1.upper():
      return TZ1Time
 
# end functions


Что я уже пробовал:

Ошибки возникают после #end time convert. Переменные иначе, если один операнд и сообщения были использованы и до #окончания времени, конвертировать и работать нормально. Я действительно не могу понять этого, может кто-нибудь помочь, пожалуйста? (Я новичок в программировании)

Примечание: этот код использует API Discord и pytz (на случай, если вы не распознаете некоторые команды и атрибуты)

ZurdoDev

Что это за сообщение об ошибке?

Насколько я понимаю, python не требует объявления переменных.

Dave Kreskowiak

Нет. Python знает, что вы неправильно определили переменные. Ты думаешь, что это так.

Это сводится к пониманию "сферы действия". Читайте: https://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html

3 Ответов

Рейтинг:
2

Richard MacCutchan

Видеть 9. классы — Python 3.7.4 документация#python-scopes-and-namespaces[^] для полного объяснения областей применения в Python.


Рейтинг:
0

Richard Deeming

message является параметром для on_message функция. Это не доступно вне этой функции.

UserInput является локальной переменной в пределах on_message функция. Он не может быть использован вне этой функции.

HelpEmbed является локальной переменной в пределах displayembed функция. Он не может быть использован вне этой функции.

NB: Пробелы очень важны. То if блок после назначения HelpEmbed не имеет отступа, поэтому он не является частью этой функции.
2.1.7 отступы[^]


Рейтинг:
0

Patrice T

Цитата:
Неопределенные переменные, даже если они явно определены выше?

Похоже, вам нужно узнать, как работает "область переменных" в Python.
Когда переменная определена внутри определения функции, она существует только внутри этой функции, и ничто внешнее не может ее видеть.
Scope - Учебник По Python[^]
Питон учебник: глобальные и Локальные переменные и пространства имен[^]