Не видно локальную переменную в if Python tkinter

Рейтинг: 0Ответов: 2Опубликовано: 11.06.2023

Пишу программу с tkinter, сделала кнопку, которая должна считать расход топлива, в зависимости от значения из Combobox. При печати текста происходит ошибка UnboundLocalError: local variable 'pacx_benz' referenced before assignment. Как это исправить? При удалении if все исправно работает, но это мне нужно. (я чайник)

def butclick():
  try:
    nach = int(nach_var.get())
    benz = int(benz_var.get())
    ost = int(ost_var.get())
    if benz_var.get() == 'бензин':
        pacx_benz = int(nach + benz - ost)
    elif benz_var.get() == 'дизельное топливо':
        pacx_diz = int(nach + benz - ost)
  except:
     pass

  if (int(ost)) > ((int(nach) + int(benz))) :
     pass #контроль
  else:
      n="\n"
      text.insert(END, n)
      b = '\n' + "Фактический расход товара(бензин): " + str(pacx_benz)
      text.insert(END, b)
      d = '\n' + "Фактический расход товара(дизель): " + str(pacx_diz)
      text.insert(END, d)

Ответы

▲ 0

Попробуйте так:

def butclick():
  ost = 0
  nach = 0
  benz = 0

  try:
    nach = int(nach_var.get())
    benz = int(benz_var.get())
    ost = int(ost_var.get())
    if benz_var.get() == 'бензин':
        pacx_benz = int(nach + benz - ost)
    elif benz_var.get() == 'дизельное топливо':
        pacx_diz = int(nach + benz - ost)
  except:
     pass

  if (int(ost)) > ((int(nach) + int(benz))) :
     pass #контроль
  else:
      n="\n"
      text.insert(END, n)
      b = '\n' + "Фактический расход товара(бензин): " + str(pacx_benz)
      text.insert(END, b)
      d = '\n' + "Фактический расход товара(дизель): " + str(pacx_diz)
      text.insert(END, d)

В этом коде я объявил переменные ost, nach, и benz до блока if.

▲ 0

В зависимости от вида топлива вы присваиваете значение или pacx_benz, или pacx_diz, и одна из этих переменных в любом случае будет не определена. Однако позднее выводите обе эти переменные. Или измените вывод - только расход бензина или только расход дизеля. Или присваивайте значение обеим переменным в самом начале.