프로그래밍 과정에서, 코드를 한 번에 전부 완성하고 바로 실행하는 경우는 드뭅니다. 코드를 조금씩 작성하고, 프로그램을 실행해 보며, 다시 코드를 추가하는 과정을 반복하는 것이 일반적입니다. 이러한 점진적인 개발 방식은 복잡한 문제를 해결하는 데 매우 효과적입니다.
이러한 방식의 핵심은 프로그램의 특정 부분에 우선 집중하고, 나머지 부분은 나중에 채워 넣는 것입니다. 이렇게 함으로써 복잡한 코드를 더 작은 조각으로 나누어 체계적으로 관리할 수 있습니다. 파이썬에서는 ‘pass’ 구문을 활용하여 이러한 전략을 효율적으로 구현할 수 있습니다. 이번 글에서는 이 ‘pass’ 구문에 대해 자세히 알아보겠습니다.
‘pass’ 구문이란 무엇인가?
대부분의 파이썬 키워드는 인터프리터에게 특정 동작을 지시하는 반면, ‘pass’ 구문은 인터프리터에게 ‘아무것도 하지 말라’고 지시하는 특이한 역할을 합니다. 이 구문은 주로 코드 블록 내부에서 사용됩니다.
파이썬에서 코드 블록은 함수, 클래스, 또는 제어 흐름문(if, for, while 등) 아래에 들여쓰기된 코드 줄들을 의미합니다. 제어 흐름문은 조건에 따라 코드 실행을 건너뛰거나 반복하는 데 사용되어, 프로그램의 일반적인 순차적 실행 흐름을 변경하는 역할을 합니다.
‘pass’ 구문이 필요한 이유
앞서 언급했듯이 ‘pass’ 구문은 아무런 동작도 하지 않습니다. 그렇다면, 프로그램이 실제로 작업을 수행해야 할 때, 왜 아무것도 하지 않는 구문이 필요할까요? 여기서는 ‘pass’ 구문이 사용되는 몇 가지 구체적인 사례를 살펴보겠습니다.
#1. 향후 구현을 위한 임시 공간 확보
코딩 과정에서, 복잡한 문제를 작은 부분으로 나누어 해결하는 것은 매우 효과적인 방법입니다. 예를 들어, 함수를 작성할 때 함수 헤더를 먼저 정의하고, 나중에 함수 본체의 코드를 채울 수 있습니다. 그러나 이 상태로 코드를 실행하려고 하면 파이썬 인터프리터는 오류를 발생시킵니다. 이는 파이썬이 함수 본체나 다른 코드 블록에 최소한 하나의 실행 가능한 구문이 있어야 한다고 요구하기 때문입니다. 다음은 오류가 발생하는 함수 예시입니다.
def my_function():
# 나중에 코드를 작성할 예정
# 현재는 아무런 구문이 없음
위 코드를 실행하면 다음과 같은 구문 오류가 발생합니다:
File "<ipython-input-1-58189b01193e>", line 3
# 현재는 아무런 구문이 없음
^
SyntaxError: incomplete input
만약 모든 코드를 한 번에 작성해야 한다면, 분할 정복 전략은 무용지물이 될 것입니다. 따라서 파이썬은 최소한 ‘무언가’를 필요로 합니다. 여기서 ‘pass’ 구문이 유용하게 사용됩니다. ‘pass’ 구문은 엄연히 하나의 구문이므로, 코드 블록에 포함시키면 파이썬은 오류를 발생시키지 않습니다. 하지만 ‘pass’ 구문은 아무런 동작도 하지 않으므로, 함수의 실제 로직에 대해서는 걱정할 필요가 없습니다. 아래는 ‘pass’ 구문을 사용한 예시입니다.
def my_function():
# 나중에 코드를 작성할 예정
# 현재는 'pass' 구문만 있음
pass
이제 위 코드를 실행해도 오류가 발생하지 않습니다. 이는 ‘pass’ 구문이 코드 블록의 유효성을 유지하면서 아무런 동작도 하지 않는다는 것을 보여줍니다.

함수를 호출하여 실제로 아무런 작업도 수행하지 않는지 확인할 수도 있습니다. 본질적으로 ‘pass’ 구문은 빈 코드 블록을 위한 자리 표시자 역할을 합니다. 이는 함수뿐만 아니라 조건문, 반복문, 클래스 등 다양한 코드 블록에서 유용하게 사용됩니다.
#2. 추상 클래스 및 인터페이스 구현
‘pass’ 구문은 추상 클래스를 구현하는 데에도 사용될 수 있습니다. 추상 클래스는 추상 메서드를 포함하는 클래스이며, 추상 메서드는 정의만 되어 있고 실제 구현은 없는 메서드입니다. 이 경우 ‘pass’ 구문은 임시적인 자리 표시자가 아니라, 영구적인 자리 표시자 역할을 합니다.
추상 클래스는 상속받는 하위 클래스가 반드시 구현해야 하는 메서드를 정의하는 기본 클래스입니다. 추상 클래스 자체는 구체적인 로직을 구현하지 않고, 하위 클래스가 따라야 할 구조를 정의합니다. 따라서 추상 클래스는 직접 인스턴스화되지 않습니다.
파이썬에서는 `abc` 패키지의 `ABC` 클래스와 `@abstractmethod` 데코레이터를 사용하여 추상 클래스를 만듭니다. 데코레이터에 대해 잘 모르거나 잊은 경우에는 파이썬 데코레이터 관련 자료를 참고하시기 바랍니다.
아래는 `abc` 패키지를 이용하여 추상 클래스를 정의하는 예시입니다.
from abc import (abstractmethod, ABC)
class BasicClass(ABC):
@abstractmethod
def basic_method(self):
# 이 메서드는 BasicClass를 상속받는 모든 하위 클래스가 구현해야 함
# 여기서는 메서드를 정의만 하고 실제 구현은 하지 않음
# 따라서 'pass' 구문을 사용하여 유효한 코드를 만듦
pass
`BasicClass`는 `ABC` 클래스를 상속받고, `basic_method`에 `@abstractmethod` 데코레이터가 적용되어 있습니다. 이제 이 클래스를 상속받는 하위 클래스는 반드시 `basic_method`를 구현해야 합니다.
class DerivedClass(BasicClass):
def basic_method(self):
print("정의된 basic_method에서 출력")
이제 `DerivedClass`를 인스턴스화하고, `basic_method`를 실행해 볼 수 있습니다.
my_object = DerivedClass() my_object.basic_method()
코드를 실행하면 화면에 메시지가 출력되어야 합니다.
정의된 basic_method에서 출력

#3. 예외 발생 시 아무 작업도 하지 않음
파이썬 프로그램 실행 중 오류가 발생하면 예외가 발생합니다. 예외는 프로그램 실행을 중단시키고 충돌을 일으키므로 매우 파괴적일 수 있습니다. 그러나 예외를 포착하고 처리하여 프로그램 충돌을 방지할 수 있습니다. 때로는 특정 예외가 발생했을 때 아무런 작업을 하고 싶지 않을 때가 있습니다. 이럴 때 ‘pass’ 구문을 유용하게 사용할 수 있습니다. 다음은 예시입니다.
try:
# 예외가 반드시 발생하는 코드
raise Exception('예외 발생')
except:
pass
위 코드를 실행하면 아무런 일도 일어나지 않습니다. 예외가 발생했지만, `except` 블록의 코드가 아무런 작업을 하지 않기 때문입니다. 일반적으로 예외가 발생하면 해당 예외를 로깅하거나 처리하는 것이 좋습니다. 하지만, 특정 상황에서는 아무런 작업을 하지 않는 것이 더 적절할 수 있습니다.
‘pass’ 구문과 ‘break’, ‘continue’ 구문의 차이점
파이썬에서 자주 사용되는 다른 키워드로는 ‘break’와 ‘continue’가 있습니다. 이들의 역할을 간단히 설명하여 ‘pass’ 구문과의 차이점을 명확히 해보겠습니다.
Break 구문
‘break’ 구문은 반복문(for 또는 while)에서 빠져나오는 데 사용됩니다. ‘break’ 구문을 만나면 해당 반복문은 즉시 종료되고, 반복문의 나머지 반복은 모두 취소됩니다. 예를 들어, 리스트에서 특정 값을 찾는 선형 검색 함수를 구현한다고 가정해 봅시다. 만약 원하는 값을 찾았다면, 리스트의 나머지 부분을 더 이상 반복할 필요가 없습니다. 이때 ‘break’ 구문을 사용하여 반복문에서 빠져나올 수 있습니다. 아래는 선형 검색 함수의 예시입니다.
def linear_search(values, search_value):
for i in range(len(values)):
if values[i] == search_value:
print("인덱스", i, "에서 값을 찾았습니다.")
break
Continue 구문
‘continue’ 구문은 반복문 내에서 현재 반복을 건너뛰고 다음 반복으로 진행하는 데 사용됩니다. 예를 들어, 숫자 리스트를 반복하는 도중에 ‘continue’ 구문을 만나면, 현재 반복을 즉시 중단하고 다음 반복을 시작합니다. 반복문 자체는 계속 실행됩니다. 아래는 ‘continue’ 구문을 사용하여 홀수만 두 배로 만드는 함수 예시입니다.
def make_even(nums):
for i in range(len(nums)):
if nums[i] % 2 == 0:
# 이미 짝수라면 다음 반복으로 건너뜀
continue
# 홀수만 이 지점에 도달
# 홀수를 2배로 만들어 짝수로 만듦
nums[i] *= 2
이제 ‘break’ 및 ‘continue’ 구문의 역할과 ‘pass’ 구문과의 차이점을 이해하셨기를 바랍니다.
‘pass’ 구문 사용 모범 사례
✅ ‘pass’ 구문은 일반적으로 임시 자리 표시자로 사용해야 하며, 코드를 완성하는 즉시 실제 코드로 대체해야 합니다.
✅ 임시 자리 표시자 외의 다른 목적으로 ‘pass’ 구문을 사용하는 경우, 해당 ‘pass’ 구문이 존재하는 이유를 주석으로 명확히 설명해야 합니다.
마지막으로
이번 글에서는 코드를 작성할 때 분할 정복 전략을 가능하게 해주는 유용한 파이썬 키워드인 ‘pass’ 구문에 대해 자세히 알아보았습니다. ‘pass’ 구문은 파이썬 공식 문서에도 자세히 설명되어 있습니다.
다음으로는 파이썬에서 자주 발생하는 오류 유형과 이를 해결하는 방법에 대한 정보를 확인해 보시기 바랍니다.