Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

파이썬 - UnboundLocalError: cannot access local variable '...' where it is not associated with a value

이 오류에 대한 재현 코드를 간단하게 다음과 같이 만들 수 있습니다.

def test():
    raise Exception("test")


def get_result():
    try:
        resp = test()
    except:
        pass

    return resp


get_result()

"""
실행 결과:
 
Traceback (most recent call last):
  File "C:\sample\testconsole\test.py", line 15, in <module>
    get_result()
  File "C:\sample\testconsole\test.py", line 12, in get_result
    return resp
UnboundLocalError: local variable 'resp' referenced before assignment
"""

원인은 "resp" 변수가 test 함수 내에서의 예외 발생으로 인해, 오류 메시지의 의미 그대로 바인딩되지 않은 채로 사용되었기 때문입니다.

이 상태에서 만약 test 함수 내에서 오류가 발생하지 않는다면,

def test():
    pass

정상적으로 resp는 (test 함수가 값을 반환하지는 않았지만) "None"으로 바인딩되므로 UnboundLocalError가 발생하지 않습니다.

따라서 예외가 발생했을 때의 문제까지 고려한다면 그전에 다음과 같이 명시적인 바인딩을 해주면 됩니다.

def test():
    raise Exception("test")


def get_result():
    resp = None

    try:
        resp = test()
    except:
        pass

    return resp


get_result()




참고로, 근래의 Python 3.11 버전에서는 UnboundLocalError 오류 메시지가 바뀌었습니다.

$ python3.11 test.py
Traceback (most recent call last):
  File "C:\sample\testconsole\test.py", line 17, in <module>
    get_result()
  File "C:\sample\testconsole\test.py", line 14, in get_result
    return resp
           ^^^^
UnboundLocalError: cannot access local variable 'resp' where it is not associated with a value




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 9/26/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11618정성태7/20/201819771개발 환경 구성: 387. 삼성 오디세이(Odyssey) 노트북의 운영체제를 새로 설치하는 방법
11617정성태7/20/201820402Team Foundation Server: 50. TFS 소스 코드 관리 기능 (5) - "Rollback", "Rollback Entire Changeset"
11616정성태7/17/201819497Graphics: 9. Unity Shader - 전역 변수의 초기화
11615정성태7/17/201823914.NET Framework: 788. RawInput을 이용한 키보드/마우스 입력 모니터링파일 다운로드1
11614정성태7/17/201826812Graphics: 8. Unity Shader - Texture의 UV 좌표에 대응하는 Pixel 좌표
11613정성태7/16/201823272Graphics: 7. Unity로 실습하는 Shader (5) - Flat Shading
11612정성태7/16/201821296Windows: 148. Windows - Raw Input의 Top level collection 의미
11611정성태7/15/201821666Graphics: 6. Unity로 실습하는 Shader (4) - 퐁 셰이딩(phong shading)
11610정성태7/15/201819024Graphics: 5. Unity로 실습하는 Shader (3) - 고로 셰이딩(gouraud shading) + 퐁 모델(Phong model) + Texture
11609정성태7/15/201822083Graphics: 4. Unity로 실습하는 Shader (2) - 고로 셰이딩(gouraud shading) + 퐁 모델(Phong model)
11608정성태7/15/201825774Graphics: 3. Unity로 실습하는 Shader (1) - 컬러 반전 및 상하/좌우 뒤집기
11607정성태7/14/201826156Graphics: 2. Unity로 실습하는 Shader [1]
11606정성태7/13/201826956사물인터넷: 19. PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기파일 다운로드1
11605정성태7/13/201823302사물인터넷: 18. New NodeMCU v3 아두이노 호환 보드의 내장 LED 및 입력 핀 사용법 [1]파일 다운로드1
11604정성태7/12/201822306Math: 47. GeoGebra 기하 (24) - 정다각형파일 다운로드1
11603정성태7/12/201817563Math: 46. GeoGebra 기하 (23) - sqrt(n) 제곱근파일 다운로드1
11602정성태7/11/201818139Math: 45. GeoGebra 기하 (22) - 반전기하학의 원에 관한 반사변환파일 다운로드1
11601정성태7/11/201821187Math: 44. GeoGebra 기하 (21) - 반전기하학의 직선 및 원에 관한 반사변환파일 다운로드1
11600정성태7/10/201819825Math: 43. GeoGebra 기하 (20) - 세 점을 지나는 원파일 다운로드1
11599정성태7/10/201818720Math: 42. GeoGebra 기하 (19) - 두 원의 안과 밖으로 접하는 직선파일 다운로드1
11598정성태7/10/201820935Windows: 147. 시스템 복구 디스크를 USB 디스크에 만드는 방법
11597정성태7/10/201823188사물인터넷: 17. Thinary Electronic - ATmega328PB 아두이노 호환 보드의 개발 환경 구성
11596정성태7/10/201820602기타: 72. 과거의 용어 설명 - OWIN
11595정성태7/10/201826100사물인터넷: 16. New NodeMCU v3 아두이노 호환 보드의 기본 개발 환경 구성
11594정성태7/8/201820986Math: 41. GeoGebra 기하 (18) - 원의 중심 및 접선파일 다운로드1
11593정성태7/8/201820138Math: 40. GeoGebra 기하 (17) - 각의 복사파일 다운로드1
... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...