문제

PYQT4 사용자 인터페이스를 사용하고 있습니다. 손쉬운 디버깅 및 문제 해결을 위해 STDERR을 로그 파일로 리디렉션했지만 이제 오류가 발생하면 사용자에게 오류 메시지를 표시해야합니다.

내 문제는 발생할 때 예외를 포착하고 사용자에게 발생이 발생했음을 알리야하지만 여전히 트레이스 백이 Stderr (즉, 로그 파일)로 전파하도록해야한다는 것입니다.

내가 다음과 같은 일을한다면 :

def updateResults(self):
    try:
        #code that updates the results
    except:
        #display error message box

이것은 예외를 포착하고 오류 로그로 전망하지 않습니다.

사용자에게 메시지를 표시 한 다음 오류를 계속 전달할 수있는 방법이 있습니까?

이것이 효과가 있습니까?

except, e:
    #display error message box
    raise e

내 목표를 달성하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 이것에 대해 잘못된 방식으로 생각하고 있다고 생각합니다. 라인 아래로 더로 로그인하기 위해 오류를 다시 제출해서는 안됩니다. 파이썬 에서이 작업을 수행하는 대포 적 방법은 로깅 모듈을 사용하는 것입니다. 문서에서 조정 :

import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)

...

try:
    # code
except:
    logging.debug('Something bad happened', exc_info=True)
    # display message box
    # raise (if necessary)

이는 SYS.STDOUT에서 생성 된 오류에 의존하는 것보다 훨씬 유연한 로깅 시스템을 제공합니다. 예외에서 어떤 방식으로 예외에서 복구 할 수 있다면 예외를 다시 제출할 필요가 없습니다.

다른 팁

정확히, 그러나 당신은 그냥 할 수 있습니다

raise

현재 처리 된 예외를 다시 제출합니다.

몇 가지 추가 정보 :

(pyqt4와 함께) 당신은 또한 모든 것을 잡으려면 자신의 기능을 다시 시작해야합니다. 촉수 예외. 그렇지 않으면 PYQT는 콘솔에 인쇄합니다. 필요한 것은 아닐 수도 있습니다 ...

import sys

def excepthook(exc_type, exc_val, tracebackobj):
    # do something useful with the uncaught exception
    ...

def main():
    # rebind excepthook
    sys.excepthook = excepthook
    ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top