요약:UnboundLocalError 처음 사용한 후 지역 변수를 다시 할당할 때global키워드 또는nonlocal키워드를 사용할 수 있습니다. global키워드를 사용하면 함수의 로컬 범위 내에서 전역 변수의 값을 수정할 수 있으며nonlocal키워드는 중첩 함수의 경우 유사한 기능을 제공합니다.

문제:지역 변수가 주어졌습니다. 처음 사용 후 지역 변수가 재 할당 될 때UnboundLocalError 을 해결하는 방법은 무엇입니까?

예:

val = 100def func(): val = val + 100 print(val)func()

산출:

Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, in <module> func() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100UnboundLocalError: local variable 'val' referenced before assignment

우리는 우리의 문제에 대한 해결책을 처리하기 전에,우리는 뒤에 근본 원인을 이해해야합니다UnboundLocalError.

언바운드 로컬 오류의 근본 원인:

변수가 함수 내에 할당되면 기본적으로 파이썬에서 로컬 변수로 처리됩니다. 값이 할당/바인딩되기 전에 지역 변수를 참조하면UnboundLocalError 이 발생합니다. 위의 예에서func()함수 내부의 파이썬 인터프리터에서 변수'val'를 읽을 때'val'가 지역 변수라고 가정합니다. 그러나 함수 내에서 값이 할당되기 전에 지역 변수가 참조되었음을 곧 알 수 있습니다. 따라서UnboundLocalError이 발생합니다.

즉,함수 내부의 전역 변수에만 액세스 할 수 있지만 함수 내에서 수정할 수는 없습니다(global 또는nonlocal키워드를 사용하여 전역 또는 비 로컬 할당을 강요하지 않는 한).

참고:모든 파이썬 예외의 상위 클래스는BaseException입니다. 다음 다이어그램은UnboundLocalError의 예외 계층 구조를 나타냅니다.

언바운드 로컬 오류 예외 계층

이제UnboundLocalError 이 발생하는 이유와 시기를 알 수 있으므로 이 오류를 극복할 수 있는 가능한 해결 방법을 살펴보겠습니다.

목차

방법 1:전역 키워드 사용

global 키워드를 사용하여 함수의 로컬 범위에서 전역 변수에 액세스하고 수정할 수 있습니다. 함수 외부에서 생성된 모든 변수는 기본적으로 전역 변수이고 함수 내에서 생성된 모든 변수는 기본적으로 로컬입니다. 따라서 함수 내에서 전역 변수를 수정하고UnboundLocalError을 피하기 위해global키워드를 사용할 수 있습니다.

우리는 위의 개념을 단순화 다음 코드를 살펴 보자:

val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()

산출:

Value at First Usage: 100Output after Modification within func(): 200

방법 2:로컬이 아닌 키워드 사용

nonlocal 키워드는 중첩 함수가 있을 때 사용됩니다. 이러한 상황에서는 변수의 로컬 범위가 정의되지 않을 수 있습니다.

우리가 우리의 문제를 다루는nonlocal 키워드의 사용을 이해하기 위해 다음 예제를 살펴 보자.

def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val)func()

출력

Output of func: 50Output of foo: 150Output of func() after changes made to foo(): 150

위의 프로그램에서nonlocal키워드는 중첩 함수foo()내부의 변수val와 함께 사용되어 로컬이 아닌 변수를 만듭니다. nonlocal 변수의 값이 변경되면 변경 내용이 지역 변수에도 반영됩니다.

면책 조항:nonlocal키워드는 파이썬 3 이상에서만 작동합니다.

방법 3: 변경 가능한 객체를 사용하여

nonlocal 이후 파이썬 3 전에 파이썬의 버전에서 작동하지 않습니다,당신은 전역 변수를 생성하지 않으려면 값을 저장하기 위해,파이썬 사전과 같은 변경 가능한 객체를 사용할 수 있습니다.

UnboundLocalError을 극복하기 위해 변경 가능한 객체의 사용법을 이해하기 위해 다음 프로그램을 살펴 보겠습니다.

variables = { # creating a mutable object/dictionary 'val': 100}print('Output before Modification of val: ', variables)def func(): variables += 50 print('Output after Modification of val: ', variables)func()
Output before Modification of val: 100Output after Modification of val: 150

방법 4:함수

에 매개 변수 전달 이것은 우리의 문제를 해결하는 전통적인 방법입니다. 전역 변수를 사용하는 대신UnboundLocalError을 피하기 위해 정의 된 함수에 매개 변수를 전달할 수 있습니다. 이 작업을 수행하는 방법을 보려면 다음 코드를 살펴 보겠습니다:

val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)

산출:

Value of val at first use: 100Output of val after modification: 200

로컬이 아닌 키워드 대 글로벌 키워드

이 문서를 체결하기 전에,우리가global nonlocal 변수/키워드의 주요 차이점을 살펴 보자.

  1. global키워드와 달리nonlocal키워드는 파이썬 3 이상에서만 작동합니다.
  2. global키워드는 기존 전역 변수 또는 새 변수와 함께 사용할 수 있지만nonlocal키워드는 기존 변수로 정의해야 합니다.

결론

위의 토론에서 우리는UnboundLocalError을 다루기 위해 다음 방법 중 하나를 사용할 수 있다는 것을 배웠습니다:

  1. global 키워드를 사용하십시오.
  2. 중첩 함수의 경우nonlocal 키워드를 사용합니다.
  3. 변경 가능한 개체를 사용합니다.
  4. 함수에 매개 변수를 전달합니다.

이 문서가 도움이 되었으면 좋겠고 읽은 후UnboundLocalError을 쉽게 다룰 수 있기를 바랍니다. 더 흥미로운 기사에 대한 계속 지켜봐 주시기 바랍니다.

여기서 어디로 가야합니까?

충분한 이론,연습하자!

코딩에 성공하기 위해서는 밖으로 나가서 실제 사람들을 위해 실제 문제를 해결해야합니다. 즉,쉽게 여섯 그림 소득자가 될 수있는 방법입니다. 그리고 그것은 당신이 실제로 필요한 기술을 연마하는 방법입니다. 결국,아무도 필요로하지 않는 학습 이론의 사용은 무엇입니까?

연습 프로젝트는 코딩에서 톱을 선명하게하는 방법입니다!

실제로 돈을 벌고 사람들의 문제를 해결하는 실용적인 코드 프로젝트에 집중함으로써 코드 마스터가 되고 싶습니까?

그런 다음 파이썬 프리랜서 개발자가 되십시오! 그것은 당신의 파이썬 능력을 향상하는 작업에 접근하는 가장 좋은 방법입니다-당신은 완전한 초보자 경우에도.

내 무료 웹 세미나에 참여”당신의 고소득 기술 파이썬을 구축하는 방법”나는 온라인 내 코딩 사업을 성장하는 방법을 시청하고 어떻게 할 수,너무-당신의 자신의 가정의 안락에서.

지금 무료 웹 세미나에 참여하세요!