스택큐힙리스트

어떤 종류의 예외가 발생했는지 어떻게 결정하나요? 본문

카테고리 없음

어떤 종류의 예외가 발생했는지 어떻게 결정하나요?

스택큐힙리스트 2023. 4. 25. 12:04
반응형

some_function()는 실행 중 예외를 발생시키므로 프로그램은 except로 이동합니다.

try:

some_function()

except:

print(exception happened!)

어떻게 예외가 발생한 원인을 볼 수 있나요?

답변 1

다른 답변들은 일반적인 예외를 잡아서는 안된다는 점을 모두 지적하지만, 그 이유를 알려주려는 사람은 아무도 없는 것으로 보입니다. 그것은 규칙을 언제 어기는지 이해하는 데 필수적인 것입니다. Here 는 설명입니다. 기본적으로 그것은 숨기지 않도록하기 위해서입니다.

오류가 발생한 사실

발생한 오류의 상세 내용 (error hiding antipattern)

그러므로 이러한 일들 중 하나도 하지 않는다면, 일반 예외를 catch하는 것은 괜찮습니다. 예를 들어, 사용자에게 예외에 대한 정보를 다른 방식으로 제공할 수 있습니다.

GUI에서 대화상자로 예외를 표시합니다.

멀티스레딩 또는 멀티프로세싱 애플리케이션에서 작업자 스레드 또는 프로세스에서 예외를 제어 스레드 또는 프로세스로 전달합니다.

일반 예외를 어떻게 잡을 수 있을까요? 몇 가지 방법이 있습니다. 예외 객체만 필요하다면 다음과 같이 하세요.

try:

someFunction()

except Exception as ex:

template = An exception of type {0} occurred. Arguments:\n{1!r}

message = template.format(type(ex).__name__, ex.args)

print message

확실하게 message를 사용자에게 놓치지 않게 알리십시오! 위에서 보여준대로 인쇄하는 것만으로는 다른 메시지들 사이에서 해당 메시지가 잠겨 있을 경우 충분하지 않을 수 있습니다. 사용자의 주의를 끌지 못하면 모든 예외를 불러들인 것과 마찬가지입니다. 이 페이지에서 답변을 읽은 후 얻게 될 인상 중 하나는 이것이 좋은 일이 아니라는 것입니다. 예외 블록을 raise 문으로 끝내면 잡힌 예외가 투명하게 다시 일어나도록하여 문제를 해결할 수 있습니다.

위와 같이 인수 없이 except: 만 사용하는 것과의 차이점은 두 가지입니다.

벌거벗은 except:는 예외 객체를 조사할 수 없습니다.

위의 코드로는 일반적으로 원하는 대로 SystemExit , KeyboardInterrupt 및 GeneratorExit 예외는 잡히지 않습니다. exception hierarchy 를 참조하세요.

만약 예외를 잡지 않은 경우와 동일한 스택 추적을 얻고 싶다면, 여전히 except 절 안에 다음과 같이 작성하면 됩니다.

import traceback

print traceback.format_exc()

만약 logging 모듈을 사용하면, 다음과 같이 예외를 로그에 (메시지와 함께) 출력할 수 있습니다.

import logging

log = logging.getLogger()

log.exception(Message for you, sir!)

스택을 더 깊이 파고볼 것이고 변수 등을 살펴보려면, except 블록 안에서 post_mortem 함수를 사용하세요. pdb 모듈 안에 있습니다.

import pdb

pdb.post_mortem()

나는 버그를 찾을 때 이 최근 방법이 귀중하다고 생각한다.

답변 2

예외(exception)는 일반적으로 프로그램에서 예측할 수 없는 상황에서 발생합니다. 예외는 다양한 유형이 있으며, 프로그래머는 어떤 예외가 발생했는지를 확인하고 적절한 조치를 취해야합니다.

예외는 일반적으로 런타임 시간에 발생하며, 프로그래머에게 오류 메시지를 제공하여 문제를 식별하는 데 도움을줍니다. 이러한 오류 메시지를 통해 프로그래머는 어떤 예외가 발생했는지 쉽게 파악할 수 있습니다.

다양한 예외 처리 방법 중 하나는 try-catch 블록을 사용하는 것입니다. try 블록은 예외가 발생할 수 있는 코드를 나타내고 catch 블록은 예외를 처리하는 코드를 포함합니다.

try-catch 블록을 사용하여 발생한 예외의 유형을 확인할 수 있습니다. catch 블록에서 예외의 유형을 확인하고, 이에 따라 적절한 조치를 취할 수 있습니다. 이러한 방법은 프로그램이 안정적으로 실행되도록 보장하며 예외가 발생했을 때 적절한 조치를 취할 수 있도록 합니다.

따라서, 예외가 발생했을 때 적절한 대처를 하기 위해서는 어떤 유형의 예외가 발생했는지 확인하는 것이 중요합니다. 이를 위해 try-catch 블록을 사용하여 예외의 유형을 확인하고, 이에 따라 적절한 조치를 취할 수 있습니다.

반응형
Comments