2009-04-29 3 views
5

파이썬에서 예외 위반 코드가 try/except 블록 안에 있더라도 파이썬 인터프리터가 항상 예외를 발생 시키도록하는 언어 (또는 인터프리터) 기능이 있습니까?Python - try/except 블록에 관계없이 raise 예외를 적용 할 수 있습니까?

저는 파이썬으로 작성된 크고 오래된 코드베이스를 상속했습니다.이 코드베이스의 목적은 우리가 개발 한 맞춤 설계 하드웨어와 통신하는 것입니다.

는 "그냥 처음부터 모든 것을 다시"의 전형적인 시나리오를 피하기 위해
try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 

, 난 : 많은 통신 오류 및 대기 시간으로 인해 다음 코드 (간체) 패턴/마스크 놓친되고있다 현재 모든 예외 오류/시간 초과를 수정하려고합니다. 한 번에 하나씩 모든 예외 처리 코드를 손으로 사용하지 않도록 설정하면됩니다.

+1

필자는 Python을 사용 해본 적이 없으므로 말할 수 없다. (따라서 실제 응답 대신 주석으로 대답한다.) 그러나 대부분의 디버거는 "모든 예외를 깨뜨릴 수있는 옵션"을 가지고있다. 이것은 "첫 번째 기회 예외"라고 불릴 수도 있습니다. 그것은 당신의 코드가 변경되지 않은 채로있게 할 것이지만 모든 "throw"를 중단 점처럼 취급합니다. 디버거에 해당 기능이 있는지 확인하십시오. – rmeador

답변

11

"모든-예외"except: 블록은 현저하게 나쁜 일이 간단하게 발견 및 취급 제외하고 분별로 교체해야합니다.

이 경우 grep은 (는) 친구입니다. 좋은 IDE는 이러한 불쾌한 집안일을 다루기 쉽게 만들어줍니다.

그러나 파이썬에서는 "작성한 코드를 무시하십시오"옵션이 없습니다.

+1

+1 "작성한 코드를 무시하십시오.":-) –

+1

pyparsing은 코드 변환을 수행하는 데 유용한 도구입니다. –

-2

여러 예외 처리기를 사용하여 여러 예외를 처리 할 수 ​​있습니다.

try: 
    serialport.write(MSG) 
except Handler1: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 
except Handler2: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not2() 
    #or just: 
    #pass 
3

아니요. 최선의 방법은 다음과 같이 코드를 변경하는 것입니다.

try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    raise 

이렇게하면 정확한 예외가 다시 발생합니다. 이해해야 할 주요 사항은 모든 예외를 시스템에서 종료하는 방법이 있으면 for 루프를 사용할 수 없다는 것입니다 (반복자는 StopIteration 예외를 발생시킵니다).

관련 문제