Python 3: Unbound Local Error: 할당 전에 참조된 로컬 변수
다음 코드는 오류를 나타냅니다.UnboundLocalError: local variable 'Var1' referenced before assignment
:
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
어떻게 하면 고칠 수 있을까요?
왜냐하면, 비록Var1
존재하며, 이름에 할당문도 사용하고 있습니다.Var1
함수의 내부(Var1 -= 1
(마지막으로)당연히, 이것은 함수의 범위 내에 변수를 만듭니다.Var1
(솔직히 말하면,-=
또는+=
기존 변수만 업데이트(재할당)하지만 알 수 없는 이유(이 컨텍스트에서는 일관성 있음)로 인해 Python은 이를 할당으로 취급합니다.Python 인터프리터는 모듈 로드 시 이를 보고 글로벌 스코프의 부하가Var1
로컬 스코프 내에서 사용하면 안 됩니다.이로 인해 변수를 로컬로 할당하기 전에 참조하려고 하면 문제가 발생합니다.
Python 개발자들은 글로벌 변수를 사용하는 것이 혼란스럽고 문제가 있는 코드를 초래하기 때문에 일반적으로 이를 거부합니다.그러나 코드를 사용하여 코드가 암시하는 바를 달성하려면 기능 상단에 다음과 같이 추가할 수 있습니다.
global Var1, Var2
이것은 Python에게 당신이 정의하려는 의도가 없음을 알려줄 것입니다.Var1
또는Var2
variable을 지정합니다.Python 인터프리터는 모듈 로드 시 이를 확인하고 글로벌 범위에서 앞서 언급한 변수에 대한 참조를 검색하도록 결정합니다.
일부 자원
- Python 웹사이트에는 이 일반적인 문제에 대한 훌륭한 설명이 있습니다.
- Python 3은 관련 스테이트먼트를 제공합니다.그것도 확인해 주세요.
함수 내에 변수 값을 설정하면 python은 해당 이름으로 로컬 변수를 생성하는 것으로 인식합니다.이 로컬 변수는 글로벌 변수를 마스킹합니다.
당신의 경우,Var1
로컬 변수로 간주되며 설정되기 전에 사용되므로 오류가 발생합니다.
이 문제를 해결하려면 , 「글로벌」이라고 명시적으로 말할 수 있습니다.global Var1
사용할 수 있습니다.
Var1 = 1
Var2 = 0
def function():
global Var1
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
Globals에 의존하지 않고 매개 변수를 전달하여 이 문제를 해결할 수 있습니다.
def function(Var1, Var2):
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
return Var1 -= 1
function(1, 1)
이 동작은 마음에 들지 않지만 파이썬은 이렇게 동작합니다.그 질문은 이미 다른 사람들이 대답했지만, 완성도를 높이기 위해 Python 2에는 그러한 기호가 더 있다는 것을 지적해 두겠습니다.
def f(x):
return x
def main():
print f(3)
if (True):
print [f for f in [1, 2, 3]]
main()
Python 2.7.6은 다음 오류를 반환합니다.
Traceback (most recent call last):
File "weird.py", line 9, in <module>
main()
File "weird.py", line 5, in main
print f(3)
UnboundLocalError: local variable 'f' referenced before assignment
은 Python™을 합니다.f
는 의 로 사용됩니다.[f for f in [1, 2, 3]]
로컬 f(3)
를 추가할 수 있습니다.global f
★★★★★★★★
def f(x):
return x
def main():
global f
print f(3)
if (True):
print [f for f in [1, 2, 3]]
main()
동작은 하지만 f는 마지막에 3이 됩니다.그것은,print [f for f in [1, 2, 3]]
됩니다.f
로로 합니다.3
더 이상 함수가 아닙니다.
에서는 Python3에 한 후 합니다.print
.
단순히 계산된 값을 반환하고 발신자가 글로벌 변수를 변경할 수 있도록 하는 것이 좋습니다.함수 내에서 다음과 같이 글로벌 변수를 조작하는 것은 좋지 않습니다.
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
return Var1 - 1
Var1 = function()
또는 글로벌 변수의 로컬 복사를 생성하여 해당 변수를 사용하여 결과를 반환하고 발신자가 적절하게 할당할 수 있도록 합니다.
def function():
v1, v2 = Var1, Var2
# calculate using the local variables v1 & v2
return v1 - 1
Var1 = function()
언급URL : https://stackoverflow.com/questions/10851906/python-3-unboundlocalerror-local-variable-referenced-before-assignment
'source' 카테고리의 다른 글
Log4j2 구성 - log4j2 구성 파일을 찾을 수 없습니다. (0) | 2022.09.12 |
---|---|
maria db를 사용한 지리 공간 (0) | 2022.09.12 |
Python에서 다중 공백을 단일 공백으로 대체 (0) | 2022.09.12 |
VueX에 여러 Axios 요청을 저장하는 가장 좋은 방법은 무엇입니까? (0) | 2022.09.12 |
sys.stdout의 차이.쓰고 인쇄할 수 있습니까? (0) | 2022.09.12 |