경고는 프로그램의 오류와 다릅니다. 오류가 발생하면 Python 프로그램이 즉시 종료됩니다. 반면에 경고는 치명적이지 않습니다. 특정 메시지를 표시하지만 프로그램은 계속됩니다. 정확히 예외가 아닌 특정 조건에 대해 사용자에게 경고하기 위해 경고가 발행됩니다. 일반적으로 키워드/함수/클래스 등과 같은 특정 프로그래밍 요소의 사용되지 않는 사용이 발견되면 경고가 나타납니다.
경고 메시지는 파이썬 표준 라이브러리의 'warning' 모듈에 정의된 warn() 함수에 의해 표시됩니다. Warning은 실제로 내장 클래스 계층에서 Exception의 하위 클래스입니다. 여러 가지 기본 제공 Warning 하위 클래스가 있습니다. 사용자 정의 하위 클래스도 정의할 수 있습니다.
경고 | 이것은 모든 경고 카테고리 클래스의 기본 클래스입니다. |
사용자 경고 | warn()의 기본 카테고리. |
사용 중단 경고 | 더 이상 사용되지 않는 기능에 대한 경고가 개발자를 위한 것인 경우 |
구문 경고 | 모호한 구문 기능에 대한 경고. |
런타임 경고 | 모호한 런타임 기능에 대한 경고. |
미래 경고 | 해당 경고가 최종 사용자를 대상으로 하는 경우 사용되지 않는 기능에 대한 경고입니다. |
PendingDeprecationWarning | 향후 더 이상 사용되지 않을 기능에 대한 경고 |
가져오기 경고 | 모듈을 가져오는 동안 발생하는 경고 |
유니코드 경고 | 유니코드와 관련된 경고. |
바이트 경고 | 바이트 및 바이트 배열과 관련된 경고. |
리소스 경고 | 리소스 사용과 관련된 경고. |
경고 예
다음 코드는 더 이상 사용되지 않는 메서드와 해당 클래스의 향후 버전에서 사용되지 않을 예정인 메서드가 있는 클래스를 정의합니다.
# warningexample.pyimport warningsclass WarnExample:def __init__(self):self.text ="Warning"def method1(self):warnings.warn( "method1은 더 이상 사용되지 않습니다. 대신 new_method를 사용하세요.", DeprecationWarning ) print ('method1' , len(self.text)) def method2(self):warnings.warn( "method2는 버전 2에서 더 이상 사용되지 않습니다. 대신 new_method를 사용하세요.", PendingDeprecationWarning ) print ('method2', len(self.text)) def new_method( self):print ('new method', len(self.text))if __name__=='__main__':e =WarnExample() e.method1() e.method2() e.new_method()
위의 스크립트가 명령 프롬프트에서 실행되는 경우
E:\python37>python warningexample.py
터미널에 경고 메시지가 표시되지 않습니다. 이를 위해서는 아래와 같이 _Wd 스위치를 사용해야 합니다.
E:\python37>python -Wd warningexample.pywarningexample.py:10:DeprecationWarning:method1은 더 이상 사용되지 않습니다. 대신 new_method를 사용합니다.DeprecationWarningmethod1 7warningexample.py:19:PendingDeprecationWarning:method2는 버전 2에서 더 이상 사용되지 않습니다.
마찬가지로 대화식 세션을 팔로우해도 경고 메시지가 표시되지 않습니다.
E:\python37>python>>> from warningexample import WarnExample>>> e =WarnExample()>>> e.method1()method1 7>>> e.method2()method2 7>>> e.new_method () 새로운 방법 7
–Wd
를 사용하여 Python 세션을 시작해야 합니다.E:\python37>python -Wd>>> from warningexample import WarnExample>>> e=WarnExample()>>> e.method1()E:\python37\warningexample.py:10:DeprecationWarning:method1은 더 이상 사용되지 않습니다. , 대신 new_method 사용DeprecationWarningmethod1 7>>> e.method2()E:\python37\warningexample.py:17:PendingDeprecationWarning:method2는 버전 2에서 더 이상 사용되지 않습니다. 대신 new_method를 사용하십시오.PendingDeprecationWarningmethod2 7>><> e.new_method /사전>경고 필터
경고 필터는 경고를 무시할지, 표시할지 또는 오류로 전환할지(예외 발생) 제어합니다.
의미 | |
---|---|
오류 | 경고를 예외로 전환하십시오. |
무시 | 경고를 무시합니다. |
항상 | 항상 경고를 내보냅니다. |
기본값 | 각 위치에서 처음 생성될 때 경고를 인쇄합니다. |
모듈 | 각 모듈에서 처음 경고가 생성될 때 경고를 인쇄합니다. |
한 번 | 처음 생성될 때 경고를 인쇄합니다. |
다음 대화식 세션은 simplefilter() 함수에 의해 필터를 기본값으로 설정합니다.
E:\python37>python>>> import warnings>>> warnings.simplefilter('default')>>> from warningexample import WarnExample>>> e=WarnExample()>>> e.method1()E:\python37\warningexample.py:10:DeprecationWarning:method1은 더 이상 사용되지 않습니다. 대신 new_method를 사용하십시오.DeprecationWarningmethod1 7>>> e.method2()E:\python37\warningexample.py:17:PendingDeprecationWarning:method2는 버전 2에서 더 이상 사용되지 않습니다. 대신PendingDeprecationWarningmethod2 7>>> e.new_method() 새 메서드 7
일시적으로 경고를 표시하지 않으려면 simplefilter를 '무시'로 설정하십시오.
가져오기 warningsdef function():warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings():warnings.simplefilter("ignore")function()