>백엔드 개발 >파이썬 튜토리얼 >Python이 UnboundLocalError를 발생시키는 이유는 무엇입니까?

Python이 UnboundLocalError를 발생시키는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 21:23:11255검색

Why Does Python Throw an UnboundLocalError?

UnboundLocalError가 발생하는 방식: Python의 바인딩 해제된 이름 및 변수 바인딩

Python에서 변수 바인딩은 변수의 범위와 수명을 결정합니다. 이름에 값이 할당되지 않으면 바인딩되지 않은 것으로 간주됩니다. 이로 인해 UnboundLocalError 예외가 발생할 수 있습니다.

언바운드 지역 변수 이해

명시적 선언이 있는 언어와 달리 Python은 블록 내 어디에서나 변수 할당을 허용합니다. 그러나 함수의 이름이 할당되기 전에 사용되면 UnboundLocalError가 발생합니다. 이는 변수가 아직 바인딩되지 않았기 때문에 컴파일러가 변수 값을 확인할 수 없기 때문에 발생합니다.

예: UnboundLocalError를 일으키는 코드

다음 코드를 고려하세요.

def foo():
    if False:
        spam = 'eggs'
    print(spam)

foo()

이 코드는 print 문에서 spam 변수가 사용되기 때문에 UnboundLocalError를 발생시킵니다. 먼저 할당되지 않고. if 문이 조건을 확인하더라도 할당을 실행하지 않으므로 스팸은 바인딩 해제됩니다.

Python의 바인딩 작업

변수는 다양한 작업을 통해 바인딩됩니다.

  • 할당
  • for 루프 반복
  • 함수 매개변수
  • 문 가져오기
  • 발견된 예외(제외 절)
  • 컨텍스트 관리자(문 포함)

이름이 함수와 같은 범위 내에 바인딩되면 지역 변수가 됩니다. 그러나 global(또는 Python 3에서는 nonlocal) 문을 사용하면 이름이 전역으로 명시적으로 선언되므로 범위 외부에서 참조하고 수정할 수 있습니다.

UnboundLocalError 방지

UnboundLocalError를 방지하려면 변수를 사용하기 전에 변수가 올바르게 바인딩되었는지 확인하세요. 이는 다음과 같이 수행할 수 있습니다.

  • 변수를 사용하기 전에 변수에 값을 할당합니다.
  • global 문을 사용하여 함수 내에서 전역 변수를 선언합니다.
  • 접근할 수 없는 코드 방지 블록.

참조:

  • [Python 참조 문서 - 이름 지정 및 바인딩](https://docs.python.org/3/ reference/introduction.html#naming-and-bound)

위 내용은 Python이 UnboundLocalError를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.