본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

파이썬 변수 이름 지을 때 피해야 할 규칙과 에러 대처법

읽는 시간 약 12분

파이썬 변수 이름 짓기의 중요성과 첫걸음

파이썬을 처음 배우거나 코딩을 시작할 때 가장 먼저 마주하는 관문 중 하나는 바로 변수 이름을 짓는 일입니다.

변수는 프로그램에서 데이터를 담아두는 상자와 같습니다. 컴퓨터는 문법 규칙만 지키면 어떤 이름이든 똑같이 처리하지만, 코드를 읽는 사람에게는 이름이 곧 설명서입니다. 이 상자에 어떤 이름을 붙이느냐에 따라 코드를 이해하기 쉬운지가 완전히 달라집니다.

좋은 변수 이름은 마치 잘 정리된 도서관의 책꽂이 라벨과 같아서 필요한 데이터를 한눈에 찾을 수 있게 해줍니다. 반면에 무분별하게 지어진 이름은 나중에 스스로 작성한 코드를 보고도 이게 무엇을 의미하는지 도저히 알 수 없게 만드는 주범이 됩니다.

프로그래밍 세계에서는 코드를 작성하는 시간보다 다른 사람이 읽거나 나중에 자신이 수정하기 위해 읽는 시간이 훨씬 더 깁니다. 따라서 파이썬 변수 이름을 지을 때는 컴퓨터가 이해할 수 있는 문법적 규칙을 지키는 것은 기본이고 인간이 쉽게 이해할 수 있는 가독성까지 고려해야 합니다.

초보자분들이 흔히 겪는 에러의 상당수가 바로 이 변수 이름 짓기 규칙을 위반하거나 사소한 오타 때문에 발생합니다. 지금부터 파이썬에서 변수 이름을 지을 때 반드시 피해야 할 규칙들과 마주치게 되는 에러를 현명하게 대처하는 방법에 대해 자세히 알아보겠습니다.

반드시 피해야 할 파이썬 변수 이름 작성 규칙

파이썬에는 변수 이름을 지을 때 지켜야 할 엄격한 문법적 제약이 존재합니다. 이를 어길 경우 코드가 실행조차 되지 않으므로 사전에 확실하게 숙지하는 것이 좋습니다. 다음은 변수 이름으로 사용할 수 없거나 절대 피해야 하는 대표적인 유형들입니다.

숫자로 시작하는 변수 이름

파이썬 변수 이름의 첫 글자에는 절대 숫자가 올 수 없습니다. 예를 들어 1st_place나 2024income과 같은 이름은 파이썬 인터프리터가 숫자와 변수를 혼동하여 곧바로 문법 에러를 발생시킵니다. 숫자를 변수 이름에 포함하고 싶다면 반드시 문자로 시작한 뒤에 배치해야 합니다. 예컨대 place_1이나 income2024와 같이 작성하면 아무런 문제 없이 작동합니다.

실제로 1st_place = 10처럼 숫자로 시작하는 이름을 써서 실행해 보면 아래와 같은 에러가 나옵니다.

파이썬에서 1st_place = 10처럼 숫자로 시작하는 변수 이름을 실행했을 때 SyntaxError: invalid decimal literal 오류가 출력된 터미널 화면

파이썬 예약어의 무단 사용

파이썬이 이미 문법적인 용도로 선점해 놓은 단어들을 예약어라고 합니다. 예를 들어 if, else, while, for, True, False, import, def 등은 파이썬의 뼈대를 이루는 핵심 명령어들입니다. 이 단어들은 변수 이름으로 사용할 수 없습니다. 예를 들어 if = 5처럼 if를 변수 이름으로 쓰면, 그 줄을 실행하는 순간 바로 SyntaxError가 발생합니다. 파이썬 예약어 목록은 파이썬 내부의 keyword 모듈을 통해 언제든지 확인할 수 있으므로 헷갈린다면 한 번쯤 조회해보는 것을 권장합니다.

특수문자와 공백의 사용

변수 이름에는 문자(알파벳, 한글 등), 숫자, 그리고 밑줄 기호(_)만을 조합하여 사용할 수 있습니다. 쉼표, 마침표, 물음표, 별표 같은 특수문자는 변수 이름으로 사용할 수 없습니다. 특히 대다수의 초보자들이 띄어쓰기를 변수 이름에 넣고 싶어 하는 실수를 자주 합니다.

user name과 같이 공백이 포함된 이름은 파이썬이 두 개의 독립된 단어로 인식하기 때문에 에러를 발생시킵니다. 공백을 넣고 싶은 자리에는 밑줄을 넣어 user_name이라고 작성하는 것이 파이썬의 전통적인 명명 규칙입니다.

현명한 프로그래머들이 지키는 변수 네이밍 기법

문법적인 에러를 피하는 것을 넘어서 좋은 코드를 작성하기 위해서는 일정한 관습을 따르는 것이 좋습니다. 파이썬 커뮤니티에서는 수십 년간 축적된 노하우를 바탕으로 특정한 네이밍 스타일을 권장하고 있으며 이를 PEP 8 가이드라인이라고 부릅니다.

스네이크 케이스의 활용

파이썬에서는 여러 단어가 조합된 변수 이름을 지을 때 각 단어를 밑줄로 연결하는 방식을 주로 사용합니다. 이를 스네이크 케이스라고 부릅니다. 예를 들어 사용자 나이를 저장하는 변수라면 user_age라고 적는 식입니다.

자바나 자바스크립트 같은 다른 언어에서는 첫 글자를 소문자로 하고 다음 단어 첫 글자를 대문자로 하는 방식을 쓰기도 하지만 파이썬에서는 밑줄 표기법이 가장 자연스럽고 표준적인 방법으로 통용됩니다.

의미를 담은 구체적인 단어 선택

변수 이름은 그 안에 담긴 데이터가 무엇인지 명확하게 설명해야 합니다. a, b, c와 같은 알파벳 한 글자는 당장 코드를 짧게 쓸 때는 편해 보이지만 코드가 조금만 길어져도 무엇을 뜻하는지 기억하기 어렵습니다. x 대신에 coordinate_x라고 적고, d 대신에 delivery_date라고 적는 것이 훨씬 좋습니다. 다만 반복문에서 잠시 쓰는 인덱스 변수의 경우 관습적으로 i나 j를 허용하기도 합니다.

자주 마주치는 변수 관련 에러와 구체적인 대처법

코딩을 하다 보면 붉은색 에러 메시지와 마주하는 순간이 찾아옵니다. 변수 이름과 관련해서 가장 흔하게 발생하는 에러들을 살펴보고 각각 어떻게 대처해야 하는지 알아보겠습니다.

구문 에러(SyntaxError)의 발생 원인과 해결

파이썬 코드를 실행하기도 전에 발생하는 에러로 주로 문법 규칙을 위반했을 때 나타납니다. 예약어를 변수 이름으로 썼거나 숫자로 시작하는 이름을 썼을 때 주로 발생합니다.

이 에러를 마주했다면 에러 메시지가 가리키는 코드의 줄 번호를 확인하고 변수 이름이 파이썬의 규칙을 어기지 않았는지 꼼꼼히 살펴보아야 합니다. 대개의 경우 변수 이름을 조금 수정하는 것만으로도 쉽게 해결됩니다.

이름 에러(NameError)의 원인과 대처 요령

코드가 실행되는 동안 변수를 참조하려고 했으나 해당 이름의 변수가 메모리에 존재하지 않을 때 발생하는 에러입니다. 가장 흔한 원인은 바로 오타입니다. total_price라고 변수를 만들어 놓고 나중에 코드를 작성할 때 totla_price라고 잘못 입력하면 이 에러가 발생합니다.

변수 이름을 total_price가 아닌 totla_price로 잘못 써서 NameError: name 'totla_price' is not defined. Did you mean: 'total_price'? 오류가 출력된 터미널 화면

이 에러를 해결하기 위해서는 대소문자가 정확하게 일치하는지, 스펠링에 틀린 부분이 없는지 변수 선언부와 사용부를 나란히 놓고 대조해보는 것이 가장 확실한 방법입니다.

파이썬 기본 이름을 변수로 덮어쓰는 실수

파이썬에는 list, print, str, len처럼 예약어는 아니지만 이미 기본 기능으로 쓰이는 이름들이 있습니다. 이런 이름은 변수 이름으로 써도 에러가 나지 않지만, 쓰는 순간 원래 기능을 잃어버립니다.

예를 들어 list = [1, 2, 3]처럼 list라는 이름으로 변수를 만든 뒤에 list(“abc”)를 쓰면 아래와 같은 에러가 나옵니다.

list = [1, 2, 3]으로 list 이름을 변수로 덮어쓴 뒤 list("abc")를 호출하자 TypeError: 'list' object is not callable 오류가 출력된 터미널 화면

에러 메시지의 ‘list’ object is not callable은 list가 이제 함수가 아니라 [1, 2, 3]이라는 값을 담은 변수가 되어서 함수처럼 호출할 수 없다는 뜻입니다. 이런 실수를 피하려면 list 대신 numbers나 name_list처럼 구체적인 이름을 쓰는 것이 좋습니다.

이름 공간 충돌과 지역 및 전역 변수의 이해

프로그램이 커지다 보면 같은 이름의 변수가 여러 개 생기면서 의도하지 않은 값을 덮어쓰는 문제가 발생합니다. 함수 내부에서 사용하는 변수와 함수 외부에서 사용하는 변수가 서로 영향을 주어 에러를 유발하기도 합니다.

이를 방지하기 위해서는 함수 안에서는 가급적 그 함수만을 위한 고유한 이름을 사용하고 전역 변수를 무분별하게 수정하는 코드를 지양해야 합니다. 변수의 유효 범위를 정확히 이해하는 것이 이러한 충돌을 미연에 방지하는 지름길입니다.

예를 들어 함수 밖에 count = 0이라는 변수가 있을 때, 함수 안에서 count = count + 1이라고 쓰면 어떻게 될까요? 아래 코드를 실행해 보았습니다.

count = 0
def add():
    count = count + 1
add()

이 코드를 실행하면 아래와 같은 에러가 나옵니다.

UnboundLocalError: cannot access local variable ‘count’ where it is not associated with a value

에러 메시지는 “함수 안의 count 변수에 값이 없는 상태에서 접근했다”는 뜻입니다. 함수 안에서 count = count + 1처럼 값을 바꾸는 코드를 쓰면, 파이썬은 이 count를 함수 밖의 count가 아니라 함수 안에서 새로 만든 지역 변수로 판단합니다. 그런데 이 지역 변수에는 아직 값이 없어서 에러가 나는 것입니다.

이 에러를 고치려면 함수 안에서 global count라고 먼저 선언하면 됩니다. 이렇게 하면 파이썬이 count를 함수 안에서 새로 만든 변수가 아니라 함수 밖의 count로 인식합니다. 다만 global은 코드를 이해하기 어렵게 만들 수 있어서, 가능하면 값을 함수 안으로 넘겨받고 결과를 돌려주는 방식을 쓰는 것이 더 좋습니다.

변수 이름 작성 시 흔히 저지르는 오해와 진실

파이썬 변수 이름에 대해 초보자들이 종종 오해하는 부분들이 있습니다. 잘못된 상식은 효율적인 학습을 방해하므로 올바른 사실 관계를 바로잡는 것이 중요합니다.

많은 사람들이 한글로 변수 이름을 지으면 파이썬이 이해하지 못할 것이라고 생각합니다. 하지만 파이썬 3부터는 유니코드를 지원하기 때문에 사용자이름 = “홍길동” 과 같이 한글로 변수 이름을 지어도 에러 없이 정상적으로 실행됩니다.

팀원들과의 협업이나 전 세계적인 오픈소스 기여라는 측면에서는 영어 사용이 권장되지만 개인적인 학습이나 간단한 스크립트 작성 시 한글 변수명은 가독성을 극대화하는 훌륭한 도구가 될 수 있습니다.

또 다른 오해 중 하나는 대소문자를 구별하지 않는다는 것입니다. 파이썬은 대소문자를 엄격하게 구별하는 프로그래밍 언어입니다. Data와 data와 DATA는 모두 완전히 다른 독립된 변수로 취급됩니다.

따라서 변수를 호출할 때 대소문자를 다르게 적으면 어김없이 에러가 발생하므로 작성할 때 항상 일관성 있는 방식을 유지하는 습관을 들여야 합니다.

효율적인 코드 관리를 위한 실용적인 조언

좋은 변수 이름을 짓는 감각은 하루아침에 생기지 않으며 수많은 코드를 직접 작성하고 고쳐보는 과정 속에서 자연스럽게 길러집니다. 코드를 작성할 때 변수 이름이 너무 길어지는 것을 두려워할 필요는 없습니다.

income_tax_rate_for_freelance_workers처럼 다소 길더라도 명확한 이름이 a_tax처럼 짧고 모호한 이름보다 훨씬 가치 있습니다. 현대의 통합 개발 환경들은 자동 완성 기능을 제공하기 때문에 긴 변수 이름도 몇 글자만 치면 알아서 완성해주므로 타이핑의 번거로움은 문제가 되지 않습니다.

에러가 발생했을 때 당황하지 않고 대처하는 마음가짐도 중요합니다. 에러 메시지는 컴퓨터가 우리에게 건네는 친절한 안내장과 같습니다. 어떤 변수가 문제인지, 어느 줄에서 에러가 발생했는지 상세하게 알려주기 때문에 에러 메시지를 차분히 읽어보는 것만으로도 문제 해결의 절반은 달성한 셈입니다.

파이썬 변수 이름 짓기의 원칙들을 늘 염두에 두고 코드를 작성한다면 에러와 마주하는 횟수는 자연스럽게 줄어들고 더욱 단단하고 아름다운 코드를 완성할 수 있게 될 것입니다.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.