일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터분석
- 인공지능
- 데이터구조
- 자료구조
- 버전관리
- 보안
- 빅데이터
- 자바스크립트
- 알고리즘
- 네트워크보안
- 2
- 컴퓨터비전
- I'm Sorry
- 컴퓨터과학
- 딥러닝
- 소프트웨어공학
- 네트워크
- 프로그래밍언어
- 컴퓨터공학
- 소프트웨어
- 코딩
- 프로그래밍
- 데이터베이스
- 파이썬
- Yes
- 데이터과학
- 클라우드컴퓨팅
- 사이버보안
- 머신러닝
- 웹개발
- Today
- Total
스택큐힙리스트
어떤 종류의 예외가 발생했는지 어떻게 결정하나요? 본문
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 블록을 사용하여 예외의 유형을 확인하고, 이에 따라 적절한 조치를 취할 수 있습니다.