두 개의 이전 답변은 맞지만 두 가지 모두 약간 분명하지 않습니다. 나는 몇 가지 예제를 보여 드리겠습니다 :
이
당신이 보여 코드는 잘 작동합니다 :
>>> 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 키워드를 사용하여이 작업을 수행합니다.
>>> gCharlie = "Global!"
>>> def foo():
... global gCharlie
... oldCharlie = gCharlie
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Local!
>>> print(gCharlie)
Local!
지금 보셨 듯이 전역 변수가 수정되었습니다.
글로벌 변수는 일반적으로 나쁜 생각입니다. 그들을 피하십시오. 대신 매개 변수로 변수를 전달하십시오.
이 코드를 직접 실행했는데 오류가 발생하지 않았습니다. 이 함수를 호출하는 코드를 제공 할 수 있습니까? 그것은 별도의 파일에 있습니까? 그렇다면 어떻게 가져 오나요? –
위의 두 가지 버전의 Python에서 위의 내용을 시도했지만 완벽하게 실행되었습니다. – senderle