source

Python 3: Unbound Local Error: 할당 전에 참조된 로컬 변수

gigabyte 2022. 9. 12. 11:42
반응형

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또는Var2variable을 지정합니다.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

반응형