Python 3 : UnboundLocalError : 할당 전에 참조 된 로컬 변수
- 파이썬 변수 범위 오류 12 답변
다음 코드는 오류를 제공합니다
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()
이 문제를 어떻게 해결할 수 있습니까? 도움을 주셔서 감사합니다!
전역에 의존하지 않고 매개 변수를 전달하여이 문제를 해결할 수 있습니다
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)
이는
Var1
존재 하더라도
Var1
함수 내부의 이름 (
Var1 -= 1
하단) 에 대 입문을 사용 하기 때문 입니다. 당연히,이 호출 한 함수의 범위 안에 변수를 생성한다
Var1
(정직하게하는
-=
또는
+=
만이 갱신 (재 할당) 기존 변수,하지만 이유를 알 수없는 (이 상황에서 가능성이 일관성), 할당과 같은 파이썬 취급을위한). 파이썬 인터프리터는 이것을 모듈로드 타임에서 확인하고 전역 범위가
Var1
로컬 범위 내에서 사용되지 않아야한다고 결정하므로 로컬로 할당되기 전에 변수를 참조하려고 할 때 문제가 발생합니다.필요하지 않은 전역 변수를 사용하는 것은 일반적으로 혼란스럽고 문제가있는 코드로 이어지기 때문에 Python 개발자는 싫은 것입니다. 그러나 코드가 의미하는 바를 달성하기 위해 그것들을 사용하려면 다음을 추가하면됩니다.
global Var1, Var2
함수 상단에. 이것은 파이썬에게 함수의 로컬 범위 내에서 변수
Var1
또는
Var2
변수 를 정의하지 않을 것이라고 알려줍니다 . 파이썬 인터프리터는 이것을 모듈로드 시간에보고 전역 범위에서 위에서 언급 한 변수에 대한 참조를 찾도록 결정합니다.
일부 자료
함수 내에서 변수 값을 설정하면 파이썬은 해당 이름으로 로컬 변수를 만드는 것으로 이해합니다. 이 지역 변수는 전역 변수를 마스킹합니다.귀하의 경우
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()
나는이 행동을 좋아하지 않지만 이것이 파이썬이 작동하는 방식입니다. 이 질문은 이미 다른 사람들에 의해 대답되었지만 완전성을 위해 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
파이썬
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()
It does work; however, f becomes 3 at the end... That is, print [f for f in [1, 2, 3]]
now changes the global variable f
to 3
, so it is not a function any more.
Fortunately, it works fine in Python3 after adding the parentheses to print
.
Why not simply return your calculated value and let the caller modify the global variable. It's not a good idea to manipulate a global variable within a function, as below:
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()
or even make local copies of the global variables and work with them and return the results which the caller can then assign appropriately
def function():
v1, v2 = Var1, Var2
# calculate using the local variables v1 & v2
return v1 - 1
Var1 = function()
'Programming' 카테고리의 다른 글
Python 패키지를 설치할 수 없음 [SSL : TLSV1_ALERT_PROTOCOL_VERSION] (0) | 2020.06.01 |
---|---|
CSS / HTML 만 사용하여 깨진 아이콘을 숨기는 방법은 무엇입니까? (0) | 2020.06.01 |
쉘 명령에서 데이터베이스를 작성하는 방법은 무엇입니까? (0) | 2020.06.01 |
CSS3 미디어 쿼리가 모바일 장치에서 작동하지 않는 이유는 무엇입니까? (0) | 2020.06.01 |
RelativeLayout에서 버튼을 중앙에 배치 할 수 있습니까? (0) | 2020.06.01 |