<개인공부>/[Python]

[python] 파이썬 pass 설명과 예제

BlockDMask 2021. 6. 4. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 패스~ pass 가 무엇인지 어디에 사용되는 것인지에 대해서 알아보겠습니다.

<목차>
1. 클래스, 함수에서 사용하는 pass 구문
2. 반복문, if 등에서 사용하는 pass 구문
3. 예외를 무시하기 위한 pass 구문

 

 

1. 파이썬 클래스, 함수에서 pass 사용


pass 구문은 일부 코드가 구문상 필요는 하지만 프로그램이 아무 작업도 하지 않기를 원하는 경우에 사용하게 됩니다.

클래스나 함수에서 pass를 사용하는 경우는
클래스가 내부 동작은 필요 없고, 의미적으로 껍데기만 필요한 경우에 pass를 통해서 껍데기만 만들어 줄 수 있습니다.
함수 같은 경우에도 실제 내부 구현은 필요 없지만, 추상 클래스에서 사용하는  경우에 이름을 전달해줄 필요가 있는 경우에 pass를 통해서 껍데기만 만들어 줄 수 있습니다.

모양은 일단 이렇습니다.

class Blog:
   pass

def func:
   pass

이런 식으로 pass를 사용하게 되면 내부 구현이 없다 하더라도 따로 에러를 발생시키지 않고, 함수나 클래스를 선언할 수 있습니다.

 

1-1) 클래스에서 pass 사용

빈 껍데기 클래스가 필요한 경우 pass 를 사용할 수 있습니다.
사실 실제로 코드를 작성할 때 아직 사용해본 적이 없습니다.

class Empty:
    pass

 

 

1-2) 함수에서 pass 사용 (클래스의 메서드)

함수에서 pass를 사용하는 경우는 제가 압니다.
실제 사용하는 곳은 추상 클래스에서 추상 메서드(함수)를 만들 때 사용하게 됩니다. (제가 생각하는 pass 주 사용처입니다.)

from abc import *


class CarBase(metaclass=ABCMeta):
    # 추상 메서드는 사용할 일이 없으니 내부 동작은 pass하고, 메서드의 존재만 알려줍니다.
    @abstractmethod
    def open_door(self):
        pass

    @abstractmethod
    def go(self):
        pass

    @abstractmethod
    def stop(self):
        pass


class SuperCar(CarBase):
    def open_door(self):
        print("문이 열리네요. 그대가 들어오죠")

    def go(self):
        print("자동차 출발")

    # 슈퍼카 스탑 생략
    def stop(self):
        pass


sc = SuperCar()
sc.open_door()
sc.go()
sc.stop()

 

CarBase 클래스에서 추상 메서드를 만들 때 pass를 사용해서 만들었습니다.
그리고 상속받은 곳에서 실제 메서드를 재정의 해주었습니다.

stop이라는 메서드는 상속받은 SuperCar 클래스에서도 pass를 통해서 내부 구현을 만들지 않았습니다.
그렇기 때문에 sc.stop()를 통해서 함수를 호출해도 아무 일도 일어나지 않는 걸 볼 수 있습니다. pass 때문에요.

위처럼 추상 클래스의 경우에 메서드의 껍데기만 필요하고 동작이 실제로 필요가 없는 경우가 있습니다.
이 경우에 pass를 통해서 메서드를 작성할 수 있습니다.

추상 클래스에 대해서 더 궁금한 게 있다면 이전에 작성해둔 클래스 관련 포스팅이 도움이 될 수 있습니다. [바로가기] 

 

 

2. 파이썬 반복문, if 등에서 pass 사용


반복문 for, while이나  if 문에서도 pass를 사용 할 수 있습니다. 하지만 적절한 예제를 찾지도, 생각도 나지 않네요..

2-1) 반복문에서 pass 사용

반복문에서 pass 를 한 번도 사용해본 적이 없어서 
적절한 코드 예시가 떠오르지 않네요.

# 아무것도 안하는 .. 의미없는 for 반복문
for val in range(1, 10):
    pass


# 무한 루프가 됩니다.
while True:
    pass

 

2-2) if문에서 pass 사용

a = 11

if a == 10:
    pass
else:
    print("a가 10이 아니라니!")


b = 11
if b == 10:
    print('b는 10입니다.')
elif b == 11:
    pass
else:
    print('b는 10도 11도 아닙니다.')


c = 20
if c == 10:
    print("c는 10 입니다.")
elif c == 20:
    print("c는 20 입니다.")
elif c == 30:
    print("c는 30 입니다.")
else:
    pass

 

이런 식으로 파이썬 if 문, else문, elif 문 내부에서도 pass를 사용할 수 있습니다.
아직 딱 필요한 경우를 찾지 못해서 예제가 조금 억지스러운 점 양해 부탁드리겠습니다.

 

 

3. 파이썬 try, except에서의 pass 사용 


프로그램이 런타임(실행 중)에 예외가 발생한 경우에, 해당 예외를 의도적으로 무시하려는 경우 pass를 사용할 수도 있습니다.

바로 예제로 확인해볼까요?

일반적인 경우에 무언가를 0으로 나누게 되면 0으로 나누는 것을 불가능하다면서 error가 발생하게 됩니다. 아래와 같이 말이죠.

def my_div(a, b):
    result = a / b
    return result


print(my_div(2, 2))
print(my_div(2, 0)) # error

위에 있던 my_div(2, 2)는 잘 실행되어서 1.0 인 결과가 잘 출력된 것을 볼 수 있습니다.
하지만 my_div(2,0)으로 호출하게 되면 에러가 발생하게 됩니다.
"ZeroDivisionError ; division by zero"
이런 에러가 발생하면 해당 부분에서 프로그램이 종료하게 되는데, 이런 상황을 막기 위해서 try, except + pass를 사용할 수 있습니다.
뭐 물론 b에 0이 들어오면 if( b == 0) ~~~ 이런 식으로 처리를 할 수도 있지만 try, except + pass를 사용해서 막아보겠습니다.

 

def my_div(a, b):
    result = 0
    try:
        result = a / b
    except:
        pass
    return result


print(my_div(2, 2))
print(my_div(2, 0))

이런식으로 try, except를 이용해서  에러를 캐치할 수 있는데요. 에러가 발생했을 때 except에서 원래라면 에러를 처리하고 프로그램을 종료한다던지 하는 행위가 있을 텐데
그것을 무시하고 에러가 발생해도 pass 하겠다는 뜻으로 except 안에 pass를 입력해주면,
에러가 무시되면서 프로그램이 죽지 않게 됩니다.

이렇게 에러를 핸들링하는 경우에도 pass를 사용할 수 있습니다.

 

감사합니다. 이렇게 오늘은 파이썬의 pass에 대해서 알아보았습니다.
혹시 pass가 다른 곳에서, 다른 방법으로 쓰이는 곳이 있다면 댓글로 알려주시면 저도 공부해서 내용 추가하겠습니다.
감사합니다.

반응형