@asb-kapusta

Почему выдается ошибка «local variable 'seconds' referenced before assignment»?

Есть код:
import time

print("Запустить таймер?")
a = input(">>> ")

seconds = 0
minutes = 0
hours = 0

print(seconds)

def timer():
	if a == "да":
		time.sleep(1)

		if seconds == 60:
			if minutes == 60:
				hours = hours + 1
				print(hours + ": " + minutes + ": " + seconds)
				timer()
			else:
				minutes = minutes + 1
				print(hours + ": " + minutes + ": " + seconds)
				timer()
		else:
			seconds = seconds + 1
			print(hours + ": " + minutes + ": " + seconds)
			timer()
timer()

Выдает ошибку: Traceback (most recent call last):
File "clock.py", line 29, in
timer()
File "clock.py", line 16, in timer
if seconds == 1:
UnboundLocalError: local variable 'seconds' referenced before assignment
Немного погуглив, я узнал, что данная ошибка означает "переменная еще не назначена", но у меня она назначена(seconds = 0). В чем ошибка?
  • Вопрос задан
  • 5605 просмотров
Решения вопроса 2
SoreMix
@SoreMix Куратор тега Python
yellow
Потому что seconds hours и minutes определены вне функции. Внутри функции внешние переменные недоступны. Для работы их нужно передать в функцию подобным образом. Не слушайте советы про global - это плохая практика

import time

print("Запустить таймер?")
a = input(">>> ")

seconds = 0
minutes = 0
hours = 0

print(seconds)

def timer(seconds, minutes, hours):
  if a == "да":
    time.sleep(1)

    if seconds == 60:
      if minutes == 60:
        hours = hours + 1
        print(hours + ": " + minutes + ": " + seconds)
        timer()
      else:
        minutes = minutes + 1
        print(hours + ": " + minutes + ": " + seconds)
        timer()
    else:
      seconds = seconds + 1
      print(hours + ": " + minutes + ": " + seconds)
      timer()

timer(seconds, minutes, hours)
Ответ написан
Комментировать
@dmshar
В том, что у вас seconds глобальная переменная, а в функции timer таковой не описана. Кстати, как и hours и minutes - это будут ваши следующие ошибки.
Лечится:
global seconds
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы