Как присвоить переменной ее старое значение + строчные данные?
Делаю логи нажатых клавиш для моей игры, нужно чтобы программа комбинировала старое значение переменной с новым в .txt документе, т.е: Logs\n => Logs\n + key "1" pressed => Logs\nKey "1" pressed.
Когда данные о нажатиях выводятся в консоль и без соединения старого значения с новым все нормально, а когда пытаюсь скомбинировать два значения... Выходит ошибка "UnboundLocalError: local variable 'whenaoutput' referenced before assignment". Как это решить?
import keyboard
import datetime as dt
tost=1
my_file = open(f"log.txt", "w+")
whenaoutput='Логи клавиш:\n'
def print_pressed_keys(e):
if e.name!='':
dt_string = dt.datetime.now()
strim=f'\n{dt_string} | Клавиша {e.name} нажата!'
whenaoutput=whenaoutput + strim
my_file.write(f"{whenaoutput}")
while tost<999:
tost+=2
keyboard.hook(print_pressed_keys)
keyboard.wait()
my_file.close()
Ответы (1 шт):
Перезаписывая переменную whenaoutput в функции print_pressed_keys, вы на самом деле "затеняете" глобальную переменную локальной, что означает, что внутри функции к глобальной переменной доступ получить никак не получится. Поведение с затенением переменной можно избежать ключевым словом global, которое будет означать, что вы хотите присвоить значение глобальной переменной.
a = 5
def foo():
global a
a = a + 1
Может возникнуть закономерный вопрос, а что если у вас будет функция в функции, и вам нужно будет присвоить значение переменной, которая не глобальная, а принадлежащая функции на уровень выше, то что делать? Для таких случаев есть ключевое слово nonlocal
def bar():
a = 5
def foo():
nonlocal a
a = a + 1
foo()