프로그램을 중단하지 않고 파이썬에서 경고 발생
프로그램 충돌 / 중지 / 인터럽트를 허용하지 않고 Python에서 경고를 발생시키는 방법에 대한 문제를 다루고 있습니다.
사용자가 0이 아닌 숫자를 전달했는지 확인하는 다음과 같은 간단한 기능을 사용합니다. 사용자가 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
warnings.warn("Warning...........Message")
파이썬 문서를 참조하십시오 : here
기본적으로 예외와 달리 경고는 중단되지 않습니다.
이후 import warnings
에는 경고 를 생성 할 때 경고 클래스 를 지정할 수 있습니다 . 하나를 지정하지 않으면 문자 그대로 UserWarning
기본적으로 사용됩니다.
>>> warnings.warn('This is my lazy warning.')
<string>:1: UserWarning: This is my lazy warning.
단순히 대신 기존 클래스를 사용하려면, 예를 들면 Warning
:
>>> warnings.warn('This is my generic warning.', Warning)
<string>:1: Warning: This is my generic 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에 인쇄됩니다.
참고 URL : https://stackoverflow.com/questions/3891804/raise-warning-in-python-without-interrupting-program
'Programing' 카테고리의 다른 글
Visual Studio Code에서 여러 프로젝트 / 폴더 열기 (0) | 2020.06.14 |
---|---|
LINQ의 IN 절 (0) | 2020.06.14 |
iOS 13 전체 화면에서 모달 표시 (0) | 2020.06.14 |
iPhone 시뮬레이터에 .ipa 파일을 설치하는 방법 (0) | 2020.06.14 |
Gson for Java를 사용한 JSON 구문 분석 (0) | 2020.06.14 |