더북(TheBook)

NOTE 왜 오류가 발생하거나 같은 숫자가 출력되나요?

1) 주피터 노트북이나 코랩에서 새로운 파일에 코드를 작성하거나 런타임을 새로 시작할 때(메뉴 → 런타임 → 런타임 다시 시작) 다음과 같이 작성하면 NameError가 발생합니다.

for a in range(20):
    print(i, '선생님, 다시는 청소를 빼먹지 않겠습니다.') # ①
# 또는
for i in range(20):
    print(a, '선생님, 다시는 청소를 빼먹지 않겠습니다.') # ②

NameError는 3장에서 공부했듯이 변수를 정의(변수를 만들어 초깃값을 저장)하지 않은 상태에서 변수를 사용했을 때 발생합니다. 에서는 변수 i를, 에서는 변수 a를 만든 적이 없는데 사용하고 있어서 ‘a(또는 i)에 값을 저장한 적이 없는데 어디에서 값을 불러오라는 거야!’라며 컴퓨터가 명령을 이해하지 못했다고 표시하는 것입니다.

2) 숫자가 0이나 다른 숫자 하나만 연속해서 출력되는 경우도 있습니다. 주피터 노트북이나 코랩을 사용하다 보면 코드를 복사한 후 붙여넣기를 해서 다음처럼 셀별로 실행하는 경우가 많습니다.

▲ 그림 5-1 코랩에서 코드의 셀별 실행

이렇게 실행하면 첫 번째 코드에서 변수 a에 0이 저장된 상태로 오류가 나서 종료됩니다. 변수 i가 정의되지 않았는데 반복문 내부에서 사용하기 때문입니다(반복문에서 정의한 변수는 a입니다). 두 번째 코드에서는 새로운 반복문을 작성해 변수 i를 만들었으나 반복문 내부의 print()에서는 i가 아닌 a를 사용합니다. 두 번째 코드에서 변수 a를 만들지 않았지만, 첫 번째 코드에서 만든 a에 0이 저장되어 있으므로 이를 사용해 오류가 나지 않고 출력 명령어를 반복해서 실행합니다.

데이터 묶음의 값을 차례대로 저장할 변수로 i를 사용한다면 반복문의 내부에서도 i를 사용해야 합니다. 이 부분을 꼭 확인하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.