HOWTO · Python
Python에서 경고 억제
이 튜토리얼은 파이썬 프로그램에서 경고를 억제하는 방법을 보여줍니다.
이 페이지의 내용
Python 경고를 억제하려면 적용 범위를 선택하세요. 스크립트에는 warnings.filterwarnings()를 사용하고, 한 프로세스에만 적용하려면 python -W ignore script.py를 실행하거나 Python을 시작하기 전에 PYTHONWARNINGS=ignore를 설정할 수 있습니다. 특정 경고 범주만 필터링하거나 컨텍스트 관리자를 사용해 특정 블록에서만 메시지를 억제할 수도 있습니다.
경고는 더 살펴볼 필요가 있는 상태를 알립니다. 예를 들어 더 이상 권장되지 않는 API를 사용하면 경고가 발생할 수 있습니다. 경고 자체가 실행을 멈추지는 않지만, 예외는 런타임 오류를 나타내며 특정 작업을 중단시키거나 처리되지 않은 경우 호출 경로를 따라 전파될 수 있습니다. 경고를 숨기기 전에 내용을 확인하세요. 억제하면 나중에 문제가 될 호환성 문제를 놓칠 수 있습니다.
warnings 모듈로 경고 억제하기
표준 라이브러리의 warnings 모듈을 사용하면 스크립트에서 경고 메시지를 필터링할 수 있습니다. warnings.filterwarnings("ignore")를 호출하면 해당 프로세스의 경고를 폭넓게 무시할 수 있습니다. 또는 범주나 메시지 같은 기준을 지정해 일부 경고만 대상으로 삼을 수 있습니다. 필터는 조건에 맞는 경고에 적용되며, 나머지 경고는 계속 표시됩니다. 필요한 코드 가까이에 범위를 좁힌 필터를 두고, 근본 원인을 해결한 뒤에는 필터를 제거하세요.
다음은 단독으로 실행할 수 있는 예제입니다.
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message="cache is stale")
warnings.warn("cache is stale", UserWarning)
print("program continues")
program continues
제공한 텍스트로 시작하는 UserWarning 메시지만 필터와 일치하므로 해당 경고는 표시되지 않습니다. 예제의 마지막 출력 문구 “program continues”는 영어로 표시되며, 경고 호출 뒤에도 실행이 계속됨을 보여 줍니다.
일시적으로 필터를 적용하려면 warnings.catch_warnings()를 사용하고, 해당 with 블록 안에서 필터를 설정하세요. 블록이 끝나면 Python은 블록 진입 시 활성 상태였던 경고 필터 상태를 복원합니다. 이 방법은 경고가 많은 작업에만 필터를 적용하면서 관련 없는 코드는 평소 경고 정책을 따르게 하고 싶을 때 유용합니다. 예를 들어 다음과 같은 패턴을 사용할 수 있습니다. with warnings.catch_warnings(): warnings.simplefilter("ignore", category=DeprecationWarning); operation(). 작업은 블록 안에서 실행해야 합니다. 블록 뒤의 호출에는 복원된 필터가 적용됩니다.
명령줄에서 경고 억제하기
Python 인터프리터 시작 시 경고 필터를 설정하려면 스크립트 이름 앞에 -W 옵션을 전달하세요. 해당 프로세스의 경고를 무시하려면 python -W ignore script.py 또는 이에 해당하는 짧은 형식인 python -Wignore script.py를 실행합니다. 보호된 표기인 -Wignore는 ignore 동작을 옵션 바로 뒤에 붙인 형태입니다. script.py를 파일 이름으로 바꾸고, 스크립트 인수는 그 뒤에 그대로 적으세요.
이 옵션은 인터프리터가 시작될 때 적용되며 스크립트를 수정하지 않습니다. 변경할 수 없는 도구를 실행하거나 한 번만 실행할 때 유용합니다. 명령줄 필터는 실행 전체에서 유용한 진단 메시지를 숨길 수 있으므로, 광범위한 억제로 필요한 정보까지 가려질 수 있다면 경고 범주를 지정하는 필터를 사용하세요.
PYTHONWARNINGS 환경 변수로 경고 억제하기
새 프로세스에 경고 필터 동작을 전달하려면 Python을 시작하기 전에 PYTHONWARNINGS를 설정하세요. 예를 들어 POSIX 셸에서는 PYTHONWARNINGS=ignore python script.py를 사용하고, PowerShell에서는 $env:PYTHONWARNINGS = "ignore"를 설정한 다음 python script.py를 실행합니다. 이 설정 방법은 셸마다 다르며, 인터프리터가 시작될 때 환경에 변수가 있어야 합니다.
실행기나 배포 환경이 프로세스를 제어한다면 환경 변수 설정이 유용합니다. 이 설정은 해당 환경에서 시작된 Python 프로세스에 적용되며, 이미 실행 중인 인터프리터의 경고 정책을 바꾸지는 않습니다. 경고를 다시 표시하려면 변수를 제거하거나 범위를 좁힌 필터를 설정하세요. 세 방법 모두 내용을 확인한 경고만 억제하고, 의존성과 API가 바뀌면 필터를 다시 점검하세요.