Python ошибка связана со значением
File "C:\Users\Sam\Documents\Python\REYSEM.py", line 36, in callback cmd = cmd.replace(x, "").strip() ^^^ UnboundLocalError: cannot access local variable 'cmd' where it is not associated with a value
Помогите как исправить ошибку
Я пробовал перевести эту ошибку и пишет что не удается получить доступ к локальной переменной 'cmd', если она не связана со значением, а вот как развязать со значением я не знаю
Ответы (1 шт):
Если очень коротко то причина в том что Вы забыли указать global перед использованием переменной cmd Этот код вызовет ту же ошибку:
cmd =''
def err():
cmd = cmd.replace('x', "").strip()
print(err())
File "/home/daniil/Desktop/demo.py", line 3, in yy cmd = cmd.replace('x', "").strip() UnboundLocalError: local variable 'cmd' referenced before assignment
Так это исправляется:
cmd =''
global cmd
def err():
cmd = cmd.replace('x', "").strip()
print(err())
Все внешние к функции переменные при их изменении внутри этой функции должны объявлятся в ней с global либо код можно написать так, но вызывать функцию нужно после того как переменная получит свое значение
cmd =''
def err(cmd = cmd): # передача переменной через значение по умолчанию
cmd = cmd.replace('x', "").strip() # работаем с локальной переменной
return cmd
cmd = err() # обновление переменной объявленной в начале
print(cmd)
Вообще так писать без надобности не рекомендуется, но я продемонстрировал в каких случаях global не нужен. Правда он так и не изменится если это скалярная переменная (потому что создастся внутренняя с таким же именем) если Вы делаете в этом случае return то все нормально
Иными словами когда Вы пишите global — Вы говорите Python что знаете что работаете с внешней переменной и хотите на нее повлиять, такое поведение не очень желательно, но иногда его можно применять.
Что касается самой ошибки то ее можно перевести примерно так:
Ошибка выходящей за ограничения переменной (под ограничениями понимается область функции): Не могу получить доступ к локальной переменной где она не ассоциируется со значением. В данном случае речь идет не про правую часть выражения а про левую.
cmd =''
def err(): # передача переменной через значение по умолчанию
cmd.replace('x', "").strip() # работаем с локальной переменной
return cmd
print(err())
Тут мы убрали левую часть cmd = и ошибки не произойдет, потому что мы не пытаемся менять глобальную переменную из функции, мы ее только читаем.