파이썬의 argparse 모듈은 명령줄 인수를 손쉽게 파싱할 수 있게 해주는 표준 라이브러리입니다. 특히 잘못된 인수나 정의되지 않은 인수가 입력될 경우, 별도의 코드 없이도 자동으로 오류 메시지를 출력하고 프로그램을 종료해 주는 유효성 검사 기능을 내장하고 있습니다. 이 글에서는 argparse가 잘못된 인수를 처리하는 방식을 예제와 함께 살펴보겠습니다.
예제 코드 작성하기
먼저 하나의 위치 인수 echo를 받는 간단한 스크립트를 작성해 보겠습니다.
#foo.py
import argparse
class InvalidArgError(Exception):
pass
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
try:
print(args.echo)
raise InvalidArgError
except InvalidArgError as e:
print(e)
여기서 InvalidArgError 클래스는 잘못된 인수 상황을 표현하기 위한 사용자 정의 예외입니다. 실제 프로젝트에서는 이처럼 커스텀 예외를 미리 정의해 두면 오류 원인을 더 명확하게 구분하고 체계적으로 관리할 수 있습니다.
터미널에서 스크립트 실행
이제 정의되지 않은 추가 인수 bar를 함께 넘겨서 스크립트를 실행해 보겠습니다.
$ python foo.py echo bar
실행 결과 확인
스크립트에는 echo라는 위치 인수만 정의되어 있으므로, argparse는 bar를 인식할 수 없는 인수로 판단하고 아래와 같은 오류를 출력한 뒤 프로그램을 종료합니다.
usage: foo.py [-h] echo foo.py: error: unrecognized arguments: bar
argparse의 오류 처리 동작 원리
argparse는 parse_args()가 호출되는 시점에 다음과 같은 검사를 자동으로 수행합니다.
- 필수 인수 누락 확인: 정의된 필수 인수가 빠져 있으면 즉시 오류를 발생시킵니다.
- 알 수 없는 인수 감지: 정의되지 않은 인수가 전달되면
unrecognized arguments오류 메시지를 출력합니다. - 자동 종료 처리: 오류 발생 시 사용법(usage) 안내와 함께 종료 코드 2로 프로그램을 종료합니다.
추가 팁: 알 수 없는 인수 무시하고 계속 실행하기
정의되지 않은 인수가 있어도 프로그램을 중단하지 않고 계속 실행하고 싶다면 parse_known_args()를 활용할 수 있습니다.
args, unknown = parser.parse_known_args()
print("알려진 인수:", args)
print("무시된 인수:", unknown)
이렇게 하면 인식할 수 없는 인수들이 unknown 리스트에 담기므로, 프로그램이 오류로 종료되지 않고 유연하게 동작합니다.
마무리
argparse는 명령줄 도구(CLI)를 개발할 때 잘못된 인수 문제를 자동으로 잡아주는 신뢰할 수 있는 도구입니다. 기본적인 자동 오류 처리를 활용하되, 상황에 따라 커스텀 예외나 parse_known_args()를 적절히 조합하면 더욱 견고하고 사용자 친화적인 파이썬 CLI 프로그램을 만들 수 있습니다.