Два предыдущих ответа здесь верны, но оба они немного неясны. Я покажу некоторые примеры:
код вы показываете будет работать нормально:
>>> gCharlie = "Global!"
>>>
>>> def foo():
... print(gCharlie)
...
>>> foo()
Global!
>>> print(gCharlie)
Global!
Так что это не проблема вообще. Тем не менее, вы не можете назначить глобальные переменные внутри функции:
>>> gCharlie = "Global!"
>>> def foo():
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Local!
>>> print(gCharlie)
Global!
Как вы видите, глобальная переменная gCharlie не изменилась. Это связано с тем, что вы не изменили его, вы создали новую локальную переменную с тем же именем. И это является причиной ошибки:
>>> gCharlie = "Global!"
>>> def foo():
... oldCharlie = gCharlie
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'gCharlie' referenced before assignment
Приведенные данные погрешности.В нем указывается местный переменная gCharlie. Проблема заключается не в невозможности доступа к глобальному gCharlie, а в том, что локальный пока не создан.
Исправление состоит в том, чтобы указать, что вы не хотите создавать локальную переменную, но хотите изменить глобальную. Вы делаете это с помощью глобального ключевого слова.
>>> gCharlie = "Global!"
>>> def foo():
... global gCharlie
... oldCharlie = gCharlie
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Local!
>>> print(gCharlie)
Local!
Как вы видите сейчас, вы изменили глобальную переменную.
Таким образом, глобальные переменные обычно являются плохими идеями. Избежать их. Попытайтесь передать переменные в качестве параметров.
Я сам запустил этот код и не получил таких ошибок. Может быть, код, вызывающий эту функцию? Это отдельный файл? Как вы импортируете его, если так? и т. д. –
Я пробовал это в двух разных версиях Python, и он работал отлично. – senderle