2017-12-28 6 views
0

다음 코드에서 특정 시간 제한을 초과하면 'execute'메서드에 전달 된 함수 (막대)의 실행을 중지시키는 'TimedExecutor'클래스를 만들려고합니다. 그러나 오류 메시지가 표시 되더라도 프로그램 실행이 중지되지 않습니다.신호 알람이 오류를 발생시키지 않습니다.

참고 : 외부 모듈에서 제공하는 기능 bar()을 변경하면 안됩니다.

답변

0

당신의 치유 기가 치명적인 경우를 제외하고는 삼키는 것입니다.

그것은 bar()다음 인쇄와는 TimeoutListener 컨텍스트 관리자에 의해 제기 된 오류를 삭제 그 루프 중 하나 except 절입니다. 그런 다음 루프가 다시 시작됩니다.

bar()은 (는) TimedExecutor이 제기 할 수있는 예외를 알지 못합니다. 대신, .execute()를 호출 bar()의 발신자는 알고 있어야합니다

from aditya.utils import TimedExecutor, TimeoutException 

... 

try: 
    TimedExecutor.execute(2, bar) 
except TimeoutException: 
    print("Timed out executing bar") 
+0

이 솔루션은 너무 작동하지 않습니다. 작업 코드를 제공 할 수 있습니까? – Aditya

+0

해결책은 단지'bar()'에서 try/except 블록을 제거하는 것입니다. 내가 제시 한 것은 의사 코드 리펙터였습니다. – pilcrow

+0

아니요, 기능 bar()는 변경할 수 없으며 다른 모듈에서 가져온 것입니다. 실행 시간을 처리하는 코드를 설계해야합니다. – Aditya

관련 문제