프로그램 충돌 / 중지 / 중단없이 파이썬에서 경고를 올리려고합니다.
다음 간단한 함수를 사용하여 사용자가 0이 아닌 숫자를 전달했는지 확인합니다. 그렇다면, 프로그램은 경고를하지만 정상적인대로 계속 진행해야합니다. 그것은 아래의 코드처럼 작동해야하지만 클래스를 사용한다 Warning()
, Error()
또는 Exception()
대신 수동으로 경고를 인쇄.
def is_zero(i):
if i != 0:
print "OK"
else:
print "WARNING: the input is 0!"
return i
아래 코드를 사용하고 함수에 0을 전달하면 프로그램이 중단되고 값이 반환되지 않습니다. 대신, 프로그램이 정상적으로 계속 진행되기를 원하며 사용자에게 함수에 0을 전달했다고 알려주십시오.
def is_zero(i):
if i != 0:
print "OK"
else:
raise Warning("the input is 0!")
return i
unittest에서 경고를 테스트했는지 테스트하고 싶습니다. 단순히 메시지를 인쇄하면 unittest에서 assertRaises로 테스트 할 수 없습니다.
답변
당신은 안된다 raise
, 당신은 경고 사용해야 warnings
모듈을. 그것을 높이면 경고가 아닌 오류가 발생합니다.
답변
답변
기본적으로 예외와 달리 경고는 중단되지 않습니다.
이후 import warnings
에는 경고 를 생성 할 때 경고 클래스 를 지정할 수 있습니다 . 하나를 지정하지 않으면 문자 그대로 UserWarning
기본적으로 사용됩니다.
>>> warnings.warn('This is a default warning.')
<string>:1: UserWarning: This is a default warning.
단순히 대신 기존 클래스를 사용하려면, 예를 들면 DeprecationWarning
:
>>> warnings.warn('This is a particular warning.', DeprecationWarning)
<string>:1: DeprecationWarning: This is a particular warning.
사용자 정의 경고 클래스 작성은 사용자 정의 예외 클래스 작성과 유사합니다.
>>> class MyCustomWarning(UserWarning):
... pass
...
... warnings.warn('This is my custom warning.', MyCustomWarning)
<string>:1: MyCustomWarning: This is my custom warning.
테스트하려면 assertWarns
또는을 고려하십시오 assertWarnsRegex
.
대안으로, 특히 독립형 애플리케이션의 경우 logging
모듈을 고려하십시오 . debug , info , warning , error 등 의 레벨을 가진 메시지를 로그 할 수 있습니다 . 경고 레벨 이상의 로그 메시지 는 기본적으로 stderr에 인쇄됩니다.