python,IF,переменная

import telebot;
import random;
import time;
from datetime import datetime
from dsb import *
from slovo import *
from intscontol import *

local_date = datetime.now()
lol = (local_date.strftime("%d, %b"))
print(lol)
global pzd
pzd = False

bot = telebot.TeleBot('1611352653:AAF0bktpaDOBpi6p43gk2kPujP9vfjs0iz8');
@bot.message_handler(content_types=['text'])

def get_text_messages(message):
    if message.text in hi:
        nu = random.randrange(4)
        
        if  nu == 0:
         bot.send_message(message.from_user.id, "Привет")
        elif nu == 1:
         bot.send_message(message.from_user.id, "хай")  
        elif nu == 2:
         bot.send_message(message.from_user.id, "Здравствуй")     
        elif nu == 3:
         bot.send_message(message.from_user.id, "Здравствуйте")

    #######

    if message.text in howareyou:
        nu = random.randrange(3)

        if nu == 0:
         bot.send_message(message.from_user.id, "хорошо")
        elif nu == 1:
         bot.send_message(message.from_user.id, "шикарно")
        elif nu == 2:
         bot.send_message(message.from_user.id, "найс")
        elif nu == 3:
         bot.send_message(message.from_user.id, "норм")

    if message.text in dl_on:
      self.pzd = True 
      bot.send_message(message.from_user.id, "Нижний свет включен")
      print(self.pzd)
      
    if message.text in dl_off:
      self.pzd = False
      bot.send_message(message.from_user.id, "Нижний свет выключен")
      print(self.pzd)
      
    if message.text == "скажи состояние нижнего света":
      print(self.pzd)
    
    if message.text in temp:
      bot.send_message(message.from_user.id, "температура в Одессе сейчас  %s" % W1ThermSensor().get_temperature())

bot.polling(none_stop=True, interval=0)

получаю UnboundLocalError: local variable 'pzd' referenced before assignment


Ответы (2 шт):

Автор решения: Sergey Derevianko

Ты делаешь глобальной не существующую переменную. Поменяй инициализацию и присвоение местами. Вот так не правильно:

global pzd
pzd = False

Вот так правильно:

pzd = False
global pzd

А вообще, лучше всего сделать так:

def get_text_messages(message):
    pzd = False

То есть инициализировать твою переменную внутри функции функции. И работать с ней там, если конечно она тебе не нужна в других функциях. Создавать глобальные переменные не самый лучший вариант.

→ Ссылка
Автор решения: CrazyElf

global pzd нужно объявлять внутри функции, у функций свои переменные со своей областью видимости. Что там снаружи объявлено global для функции не указ.

→ Ссылка