AI 코딩/오류 읽기 시리즈

AI 코딩할 때 꼭 알아야 할 오류 읽는 법 : NameError

togchae 2026. 4. 23. 17:41

지난 글에서는 문법이 잘못되었을 때 발생하는 SyntaxError에 대해 알아봤습니다.

이번에는 분명 문법은 올바른 코드인데 오류가 발생하는 경우를 알아보려고 합니다.

 

예시 코드부터 살펴볼까요?

# NameError

def name_error_example_1():
    x = 10
    print(y)

def name_error_example_2():
    def inner_function():
        value = 10
    inner_function()
    print(value)

name_error_example_1()
name_error_example_2()

오.. 여러 함수들이 보입니다. def 뒤에 ':'도 잘 작성해두었고요.

언뜻 보아서는 오류가 없는 것 같으니 한번 실행해볼까요?

처음 보는 NameError 라는 오류가 나왔습니다.

NameError라... 이름에 뭐가 문제가 있는걸까요?

 

오류를 상세히 알고싶으면? 맨 마지막 줄을 읽으라고 했죠.

NameError: name 'y' is not defined

이름오류 : 'y'라는 이름은 선언되지 않았습니다.

라고 적혀있네요. 어라 분명 앞에서 선언을 했었는데...

아 지금 보니 선언한 변수 이름은 x이고 뒤에선 y로 활용하고 있네요.

수정할 수 있는 두가지 방법이 있겠죠?

1. x를 y로 바꿔서 선언하기

2. y를 x로 바꿔서 활용하기

 

자 잘 수정한뒤에 실행을 한번 더 해봅시다.

보면 위의 함수는 잘 실행되어서 10이 잘 출력되었고

밑에는 이런.. 오류가 하나 더 있습니다.

이번에는 'value'는 선언되지 않았습니다. 혹시 'False'를 말하시는건가요?

라고 친절하게 적혀있네요.

 

하지만 저희는 False를 원하는 것도 아니고.. 분명히 이번에는 정확하게 value를 선언해줬습니다!

코드를 한번 다시 볼까요?

def name_error_example_2():
    def inner_function():
        value = 10
    inner_function()
    print(value)

보면 inner_function() 이라는 함수에 value = 10이 선언이 되어있고

그 밑에 inner_function() 해서 함수를 한번 실행까지 시켜주었죠.

그런데 왜 print(value)에서 오류가 생기는걸까요?

 

코드가 길어지고, 변수를 썼다가 없앴다가 하다보면 AI도 많이 하는 실수 중 하나입니다.

변수를 사용할 때에는 지금 사용하려는 곳의 상위에 있거나 같은 범위에 있어야 합니다.

 

말이 좀 어려우신가요?

더보기에서 예시를 들어서 설명해드릴테니 천천히 이해해봅시다.

물론 바로 이해가 되신분은 설명을 넘기셔도 됩니다.

더보기
더보기
a = 5
def testFunc():
    b = 10
    def testFunc2():
        c = 20
        print(a + b + c)
    testFunc2()
    print(a + b + c)
    
testFunc()

자 어려운 코드가 나왔습니다. 무려 변수가 a, b, c 3개나 있네요.

이 코드를 직접 실행해보면요

testFunc2()의 print(a + b + c)는 잘 작동하는데

testFunc의 print(a + b + c)에서 c가 오류를 일으킵니다.

 

이해가 되셨나요?

a는 바깥에서 선언되어 testFunc와 testFunc2가 모두 이용할 수 있습니다.

b는 testFunc에서 선언되어 동일하게 testFunc와 testFunc2가 이용할 수 있습니다.

c는 testFunc2에서 선언되어서 testFunc2만 이용할 수 있고,

      testFunc 입장에서는 아니 'c'가 뭔데? 하는 상황이 발생합니다. 

이처럼 변수는 어디에서 만들었는지에 따라 사용할 수 있는 범위가 다릅니다.

이 범위를 보통 스코프(scope)라고 부릅니다.

 

이 코드 같은경우에는 원래 사용자의 방식에 맞춰서 수정을 해야겠죠?

value라는 값이 다른 함수에서도 쓰이고 다 쓰이는 변수에요.. 하면 가장 바깥에 선언을 해주어야겠죠?

이 함수에서는 전체적으로 사용되는 값이에요 하면 name_error_example_2()함수의 처음부분에 선언을 해주어도 될 것 같구요.

 

하지만 제 의도는 inner_function에서 어떤 작업을 하고 그 값을 받으려는 목적이었기에 아래처럼 수정을 해보았습니다.

def name_error_example_2():
    def inner_function():
        value = 10
        return value

    value = inner_function()
    print(value)

정말 멋진 코드네요.

 

실행해보면 이번 예시 코드에서의 오류를 모두 해결했다는 것을 알 수 있습니다.

 

이처럼 NameError

변수명이나 함수명처럼 어떤 이름(name)을 사용했는데,

파이썬이 그 이름을 현재 코드 안에서 찾지 못할 때 발생하는 오류입니다.

 

그래서 NameError는 어디부터 확인해야되는데요?

1. 변수명이나 함수명에 오타가 없는지

2. 해당 이름을 정의했는지

3. 함수 안에서 만든 변수를 바깥에서 쓰고 있는지

4. AI가 준 코드가 앞부분을 생략하고 있지 않은지

 

제 경험상으로는 특히 AI와 작업을 같이 하다보면,

앞부분을 생략하거나 다른 파일에서 쓰던 변수명을 동일하게 사용하려다가 오류가 자주 발생했습니다.

또한 저는 test라는 변수명을 참 좋아하는데 항상 tset이라고 쳐서 오류가 발생하는 경우가 있습니다...

 

NameError는 사실 본인이 작성하는 코드에서는 오타가 아니면 잘 발생하지는 않는 오류입니다.

하지만 우리는 AI와 작업하고 있고, 내가 직접 작성하는 코드가 아니다보니 종종 마주칠때가 있는데요.

 

AI가 코드를 작성해주더라도, 변수와 함수가 어디에 정의가 되어있는지 직접 확인하는 습관은 에러가 아니여도 꼭 필요합니다.

 

왜냐하면, 변수와 함수는 프로세스가 실행되는 동안 메모리를 차지할 수 밖에 없고

모든걸 바깥에다가 선언해두면 프로그램이 실행되는 동안 계속 메모리에 저장되고 있을테니

여러분들의 기발한 프로젝트들이 너무 무거워지는 불상사가 발생할 수 있겠죠?

 

여러분이 모든 오류를 알아볼 수 있을때까지,

다음에도 다른 오류를 같이 읽어보고 알아보는 글을 올려보도록 하겠습니다!